9
0
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:
iqtester
2025-07-24 10:44:32 -04:00
parent 8b87b159d1
commit 71d3cfe1f6
3 changed files with 7 additions and 13 deletions

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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");