mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 01:49:30 +00:00
check fluid through NMS
This commit is contained in:
@@ -3,6 +3,7 @@ package net.momirealms.craftengine.bukkit.item.behavior;
|
||||
import net.momirealms.craftengine.bukkit.block.BukkitBlockManager;
|
||||
import net.momirealms.craftengine.bukkit.nms.FastNMS;
|
||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MBlocks;
|
||||
import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MFluids;
|
||||
import net.momirealms.craftengine.core.block.ImmutableBlockState;
|
||||
import net.momirealms.craftengine.core.block.UpdateOption;
|
||||
import net.momirealms.craftengine.core.item.behavior.ItemBehavior;
|
||||
@@ -12,7 +13,6 @@ import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigExce
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.MiscUtils;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
@@ -26,16 +26,12 @@ public class DoubleHighBlockItemBehavior extends BlockItemBehavior {
|
||||
|
||||
@Override
|
||||
protected boolean placeBlock(Location location, ImmutableBlockState blockState) {
|
||||
Object worldServer = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(location.getWorld());
|
||||
Object level = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(location.getWorld());
|
||||
Object blockPos = FastNMS.INSTANCE.constructor$BlockPos(location.getBlockX(), location.getBlockY() + 1, location.getBlockZ());
|
||||
UpdateOption option = UpdateOption.builder().updateNeighbors().updateClients().updateImmediate().updateKnownShape().build();
|
||||
Object stateToPlace;
|
||||
if (location.getWorld().getBlockAt(location.getBlockX(), location.getBlockY() + 1, location.getBlockZ()).getType() == Material.WATER) {
|
||||
stateToPlace = MBlocks.WATER$defaultState;
|
||||
} else {
|
||||
stateToPlace = MBlocks.AIR$defaultState;
|
||||
}
|
||||
FastNMS.INSTANCE.method$LevelWriter$setBlock(worldServer, blockPos, stateToPlace, option.flags());
|
||||
Object fluidData = FastNMS.INSTANCE.method$BlockGetter$getFluidState(level, blockPos);
|
||||
Object stateToPlace = fluidData == MFluids.WATER$defaultState ? MFluids.WATER$defaultState : MBlocks.AIR$defaultState;
|
||||
FastNMS.INSTANCE.method$LevelWriter$setBlock(level, blockPos, stateToPlace, option.flags());
|
||||
return super.placeBlock(location, blockState);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,8 +18,6 @@ public final class MBlocks {
|
||||
public static final Object SHULKER_BOX;
|
||||
public static final Object COMPOSTER;
|
||||
public static final Object SNOW;
|
||||
public static final Object WATER;
|
||||
public static final Object WATER$defaultState;
|
||||
|
||||
private static Object getById(String id) {
|
||||
Object rl = FastNMS.INSTANCE.method$ResourceLocation$fromNamespaceAndPath("minecraft", id);
|
||||
@@ -39,7 +37,5 @@ public final class MBlocks {
|
||||
SHULKER_BOX = getById("shulker_box");
|
||||
COMPOSTER = getById("composter");
|
||||
SNOW = getById("snow");
|
||||
WATER = getById("water");
|
||||
WATER$defaultState = FastNMS.INSTANCE.method$Block$defaultState(WATER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ public final class MFluids {
|
||||
private MFluids() {}
|
||||
|
||||
public static final Object WATER;
|
||||
public static final Object WATER$defaultState;
|
||||
public static final Object FLOWING_WATER;
|
||||
public static final Object LAVA;
|
||||
public static final Object FLOWING_LAVA;
|
||||
@@ -21,6 +22,7 @@ public final class MFluids {
|
||||
static {
|
||||
try {
|
||||
WATER = getById("water");
|
||||
WATER$defaultState = CoreReflections.method$Fluid$defaultFluidState.invoke(WATER);
|
||||
FLOWING_WATER = getById("flowing_water");
|
||||
LAVA = getById("lava");
|
||||
FLOWING_LAVA = getById("flowing_lava");
|
||||
|
||||
Reference in New Issue
Block a user