mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 02:20:57 +00:00
Fix SNBT writing
This commit is contained in:
@@ -20,13 +20,16 @@ package com.dfsek.terra.mod.handle;
|
|||||||
import com.dfsek.terra.api.block.state.BlockStateExtended;
|
import com.dfsek.terra.api.block.state.BlockStateExtended;
|
||||||
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
|
import net.minecraft.block.BlockEntityProvider;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
import net.minecraft.command.argument.BlockArgumentParser;
|
import net.minecraft.command.argument.BlockArgumentParser;
|
||||||
import net.minecraft.command.argument.BlockArgumentParser.BlockResult;
|
import net.minecraft.command.argument.BlockArgumentParser.BlockResult;
|
||||||
import net.minecraft.command.argument.BlockStateArgument;
|
import net.minecraft.command.argument.BlockStateArgument;
|
||||||
import net.minecraft.nbt.NbtCompound;
|
import net.minecraft.nbt.NbtCompound;
|
||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.registry.Registries;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -51,6 +54,15 @@ public class MinecraftWorldHandle implements WorldHandle {
|
|||||||
if (blockResult.nbt() != null) {
|
if (blockResult.nbt() != null) {
|
||||||
net.minecraft.block.BlockState state = blockResult.blockState();
|
net.minecraft.block.BlockState state = blockResult.blockState();
|
||||||
NbtCompound nbtCompound = blockResult.nbt();
|
NbtCompound nbtCompound = blockResult.nbt();
|
||||||
|
if (state.hasBlockEntity()) {
|
||||||
|
BlockEntity blockEntity = ((BlockEntityProvider) state.getBlock()).createBlockEntity(new BlockPos(0, 0, 0), state);
|
||||||
|
|
||||||
|
nbtCompound.putInt("x", 0);
|
||||||
|
nbtCompound.putInt("y", 0);
|
||||||
|
nbtCompound.putInt("z", 0);
|
||||||
|
|
||||||
|
nbtCompound.put("id", BlockEntity.TYPE_CODEC, blockEntity.getType());
|
||||||
|
}
|
||||||
blockState = (BlockStateExtended) new BlockStateArgument(state, blockResult.properties().keySet(), nbtCompound);
|
blockState = (BlockStateExtended) new BlockStateArgument(state, blockResult.properties().keySet(), nbtCompound);
|
||||||
} else {
|
} else {
|
||||||
blockState = (BlockState) blockResult.blockState();
|
blockState = (BlockState) blockResult.blockState();
|
||||||
|
|||||||
@@ -18,20 +18,30 @@
|
|||||||
package com.dfsek.terra.mod.mixin.implementations.terra.chunk;
|
package com.dfsek.terra.mod.mixin.implementations.terra.chunk;
|
||||||
|
|
||||||
import com.dfsek.seismic.math.coord.CoordFunctions;
|
import com.dfsek.seismic.math.coord.CoordFunctions;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.block.state.BlockStateExtended;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockEntityProvider;
|
||||||
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.client.render.DimensionEffects.End;
|
||||||
import net.minecraft.command.argument.BlockStateArgument;
|
import net.minecraft.command.argument.BlockStateArgument;
|
||||||
import net.minecraft.fluid.Fluid;
|
import net.minecraft.fluid.Fluid;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.ChunkPos;
|
import net.minecraft.util.math.ChunkPos;
|
||||||
import net.minecraft.util.math.random.Random;
|
import net.minecraft.util.math.random.Random;
|
||||||
import net.minecraft.world.ChunkRegion;
|
import net.minecraft.world.ChunkRegion;
|
||||||
|
import net.minecraft.world.StructureWorldAccess;
|
||||||
import net.minecraft.world.WorldProperties;
|
import net.minecraft.world.WorldProperties;
|
||||||
import net.minecraft.world.biome.source.BiomeAccess;
|
import net.minecraft.world.biome.source.BiomeAccess;
|
||||||
import net.minecraft.world.dimension.DimensionType;
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
|
import net.minecraft.world.gen.feature.EndGatewayFeature;
|
||||||
import net.minecraft.world.tick.MultiTickScheduler;
|
import net.minecraft.world.tick.MultiTickScheduler;
|
||||||
import net.minecraft.world.tick.OrderedTick;
|
import net.minecraft.world.tick.OrderedTick;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Implements;
|
import org.spongepowered.asm.mixin.Implements;
|
||||||
import org.spongepowered.asm.mixin.Interface;
|
import org.spongepowered.asm.mixin.Interface;
|
||||||
@@ -44,7 +54,7 @@ import com.dfsek.terra.api.world.chunk.Chunk;
|
|||||||
|
|
||||||
@Mixin(ChunkRegion.class)
|
@Mixin(ChunkRegion.class)
|
||||||
@Implements(@Interface(iface = Chunk.class, prefix = "terraChunk$"))
|
@Implements(@Interface(iface = Chunk.class, prefix = "terraChunk$"))
|
||||||
public abstract class ChunkRegionMixin {
|
public abstract class ChunkRegionMixin implements StructureWorldAccess {
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
@Final
|
@Final
|
||||||
@@ -62,14 +72,41 @@ public abstract class ChunkRegionMixin {
|
|||||||
@Final
|
@Final
|
||||||
private MultiTickScheduler<Fluid> fluidTickScheduler;
|
private MultiTickScheduler<Fluid> fluidTickScheduler;
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
public abstract net.minecraft.block.BlockState getBlockState(BlockPos pos);
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
@Nullable
|
||||||
|
public abstract boolean setBlockState(BlockPos pos, net.minecraft.block.BlockState state, int flags, int maxUpdateDepth);
|
||||||
|
|
||||||
|
|
||||||
public void terraChunk$setBlock(int x, int y, int z, @NotNull BlockState data, boolean physics) {
|
public void terraChunk$setBlock(int x, int y, int z, @NotNull BlockState data, boolean physics) {
|
||||||
ChunkPos pos = centerPos.getPos();
|
ChunkPos pos = centerPos.getPos();
|
||||||
BlockPos blockPos = new BlockPos(CoordFunctions.chunkAndRelativeToAbsolute(pos.x, x), y, CoordFunctions.chunkAndRelativeToAbsolute(pos.z, z));
|
BlockPos blockPos = new BlockPos(CoordFunctions.chunkAndRelativeToAbsolute(pos.x, x), y, CoordFunctions.chunkAndRelativeToAbsolute(pos.z, z));
|
||||||
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
||||||
if (isExtended) {
|
if (isExtended) {
|
||||||
((BlockStateArgument) data).setBlockState(world, blockPos, 0);
|
BlockStateArgument arg = ((BlockStateArgument) data);
|
||||||
|
net.minecraft.block.BlockState state = arg.getBlockState();
|
||||||
|
setBlockState(blockPos, state, 0, 512);
|
||||||
|
net.minecraft.world.chunk.Chunk chunk = getChunk(blockPos);
|
||||||
|
BlockEntity blockEntity;
|
||||||
|
NbtCompound nbt = ((NbtCompound) (Object) ((BlockStateExtended)data).getData());
|
||||||
|
if ("DUMMY".equals(nbt.getString("id", ""))) {
|
||||||
|
if (state.hasBlockEntity()) {
|
||||||
|
blockEntity = ((BlockEntityProvider)state.getBlock()).createBlockEntity(blockPos, state);
|
||||||
} else {
|
} else {
|
||||||
((ChunkRegion) (Object) this).setBlockState(blockPos, (net.minecraft.block.BlockState) data, 0);
|
blockEntity = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
blockEntity = BlockEntity.createFromNbt(blockPos, state, nbt, this.world.getRegistryManager());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blockEntity != null) {
|
||||||
|
blockEntity.setWorld(this.world);
|
||||||
|
chunk.setBlockEntity(blockEntity);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setBlockState(blockPos, (net.minecraft.block.BlockState) data, 0, 512);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(physics) {
|
if(physics) {
|
||||||
|
|||||||
@@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.mod.mixin.implementations.terra.chunk;
|
package com.dfsek.terra.mod.mixin.implementations.terra.chunk;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.block.state.BlockStateExtended;
|
||||||
|
|
||||||
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
import net.minecraft.command.argument.BlockStateArgument;
|
import net.minecraft.command.argument.BlockStateArgument;
|
||||||
import net.minecraft.nbt.NbtCompound;
|
import net.minecraft.nbt.NbtCompound;
|
||||||
import net.minecraft.server.command.SetBlockCommand;
|
import net.minecraft.server.command.SetBlockCommand;
|
||||||
@@ -52,12 +55,18 @@ public abstract class WorldChunkMixin {
|
|||||||
@Nullable
|
@Nullable
|
||||||
public abstract net.minecraft.block.BlockState setBlockState(BlockPos pos, net.minecraft.block.BlockState state, int flags);
|
public abstract net.minecraft.block.BlockState setBlockState(BlockPos pos, net.minecraft.block.BlockState state, int flags);
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
protected abstract BlockEntity loadBlockEntity(BlockPos pos, NbtCompound nbt);
|
||||||
|
|
||||||
@SuppressWarnings("ConstantValue")
|
@SuppressWarnings("ConstantValue")
|
||||||
public void terra$setBlock(int x, int y, int z, BlockState data, boolean physics) {
|
public void terra$setBlock(int x, int y, int z, BlockState data, boolean physics) {
|
||||||
BlockPos blockPos = new BlockPos(x, y, z);
|
BlockPos blockPos = new BlockPos(x, y, z);
|
||||||
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
||||||
if (isExtended) {
|
if (isExtended) {
|
||||||
((BlockStateArgument) data).setBlockState((net.minecraft.server.world.ServerWorld) world, blockPos, 0);
|
BlockStateArgument arg = ((BlockStateArgument) data);
|
||||||
|
net.minecraft.block.BlockState state = arg.getBlockState();
|
||||||
|
setBlockState(blockPos, state, 0);
|
||||||
|
loadBlockEntity(blockPos, ((NbtCompound) (Object) ((BlockStateExtended)data).getData()));
|
||||||
} else {
|
} else {
|
||||||
setBlockState(blockPos, (net.minecraft.block.BlockState) data, 0);
|
setBlockState(blockPos, (net.minecraft.block.BlockState) data, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,19 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.mod.mixin.implementations.terra.world;
|
package com.dfsek.terra.mod.mixin.implementations.terra.world;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.block.state.BlockStateExtended;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockEntityProvider;
|
||||||
import net.minecraft.block.FluidBlock;
|
import net.minecraft.block.FluidBlock;
|
||||||
import net.minecraft.command.argument.BlockStateArgument;
|
import net.minecraft.command.argument.BlockStateArgument;
|
||||||
import net.minecraft.entity.SpawnReason;
|
import net.minecraft.entity.SpawnReason;
|
||||||
import net.minecraft.fluid.Fluid;
|
import net.minecraft.fluid.Fluid;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
import net.minecraft.util.collection.BoundedRegionArray;
|
import net.minecraft.util.collection.BoundedRegionArray;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.ChunkRegion;
|
import net.minecraft.world.ChunkRegion;
|
||||||
|
import net.minecraft.world.StructureWorldAccess;
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
import net.minecraft.world.chunk.Chunk;
|
import net.minecraft.world.chunk.Chunk;
|
||||||
import net.minecraft.world.chunk.ChunkGenerationStep;
|
import net.minecraft.world.chunk.ChunkGenerationStep;
|
||||||
@@ -56,7 +61,7 @@ import com.dfsek.terra.mod.util.MinecraftUtil;
|
|||||||
|
|
||||||
@Mixin(ChunkRegion.class)
|
@Mixin(ChunkRegion.class)
|
||||||
@Implements(@Interface(iface = ProtoWorld.class, prefix = "terraWorld$"))
|
@Implements(@Interface(iface = ProtoWorld.class, prefix = "terraWorld$"))
|
||||||
public abstract class ChunkRegionMixin {
|
public abstract class ChunkRegionMixin implements StructureWorldAccess {
|
||||||
private ConfigPack terra$config;
|
private ConfigPack terra$config;
|
||||||
|
|
||||||
|
|
||||||
@@ -95,17 +100,36 @@ public abstract class ChunkRegionMixin {
|
|||||||
int flags = physics ? 3 : 1042;
|
int flags = physics ? 3 : 1042;
|
||||||
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
||||||
if (isExtended) {
|
if (isExtended) {
|
||||||
((BlockStateArgument) data).setBlockState(world, blockPos, flags);
|
BlockStateArgument arg = ((BlockStateArgument) data);
|
||||||
|
net.minecraft.block.BlockState state = arg.getBlockState();
|
||||||
|
setBlockState(blockPos, state, flags);
|
||||||
|
net.minecraft.world.chunk.Chunk chunk = getChunk(blockPos);
|
||||||
|
net.minecraft.block.entity.BlockEntity blockEntity;
|
||||||
|
NbtCompound nbt = ((NbtCompound) (Object) ((BlockStateExtended)data).getData());
|
||||||
|
if ("DUMMY".equals(nbt.getString("id", ""))) {
|
||||||
|
if (state.hasBlockEntity()) {
|
||||||
|
blockEntity = ((BlockEntityProvider)state.getBlock()).createBlockEntity(blockPos, state);
|
||||||
} else {
|
} else {
|
||||||
((ChunkRegion) (Object) this).setBlockState(blockPos, (net.minecraft.block.BlockState) data, flags);
|
blockEntity = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
blockEntity = net.minecraft.block.entity.BlockEntity.createFromNbt(blockPos, state, nbt, getRegistryManager());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blockEntity != null) {
|
||||||
|
blockEntity.setWorld(world);
|
||||||
|
chunk.setBlockEntity(blockEntity);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setBlockState(blockPos, (net.minecraft.block.BlockState) data, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(physics) {
|
if(physics) {
|
||||||
net.minecraft.block.BlockState state = isExtended ? ((BlockStateArgument) data).getBlockState() : ((net.minecraft.block.BlockState) data);
|
net.minecraft.block.BlockState state = isExtended ? ((BlockStateArgument) data).getBlockState() : ((net.minecraft.block.BlockState) data);
|
||||||
if(state.isLiquid()) {
|
if(state.isLiquid()) {
|
||||||
fluidTickScheduler.scheduleTick(OrderedTick.create(state.getFluidState().getFluid(), blockPos));
|
getFluidTickScheduler().scheduleTick(OrderedTick.create(state.getFluidState().getFluid(), blockPos));
|
||||||
} else {
|
} else {
|
||||||
blockTickScheduler.scheduleTick(OrderedTick.create(state.getBlock(), blockPos));
|
getBlockTickScheduler().scheduleTick(OrderedTick.create(state.getBlock(), blockPos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,16 +17,25 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.mod.mixin.implementations.terra.world;
|
package com.dfsek.terra.mod.mixin.implementations.terra.world;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.block.state.BlockStateExtended;
|
||||||
import com.dfsek.terra.mod.mixin.invoke.FluidBlockInvoker;
|
import com.dfsek.terra.mod.mixin.invoke.FluidBlockInvoker;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockEntityProvider;
|
||||||
import net.minecraft.block.FluidBlock;
|
import net.minecraft.block.FluidBlock;
|
||||||
import net.minecraft.command.argument.BlockStateArgument;
|
import net.minecraft.command.argument.BlockStateArgument;
|
||||||
import net.minecraft.entity.SpawnReason;
|
import net.minecraft.entity.SpawnReason;
|
||||||
import net.minecraft.fluid.Fluid;
|
import net.minecraft.fluid.Fluid;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
|
import net.minecraft.registry.DynamicRegistryManager;
|
||||||
|
import net.minecraft.registry.RegistryKey;
|
||||||
|
import net.minecraft.registry.entry.RegistryEntry;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.ChunkRegion;
|
import net.minecraft.world.ChunkRegion;
|
||||||
|
import net.minecraft.world.MutableWorldProperties;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
|
import net.minecraft.world.dimension.DimensionType;
|
||||||
import net.minecraft.world.tick.MultiTickScheduler;
|
import net.minecraft.world.tick.MultiTickScheduler;
|
||||||
import net.minecraft.world.tick.OrderedTick;
|
import net.minecraft.world.tick.OrderedTick;
|
||||||
import net.minecraft.world.tick.WorldTickScheduler;
|
import net.minecraft.world.tick.WorldTickScheduler;
|
||||||
@@ -54,17 +63,24 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||||||
|
|
||||||
@Mixin(net.minecraft.server.world.ServerWorld.class)
|
@Mixin(net.minecraft.server.world.ServerWorld.class)
|
||||||
@Implements(@Interface(iface = ServerWorld.class, prefix = "terra$"))
|
@Implements(@Interface(iface = ServerWorld.class, prefix = "terra$"))
|
||||||
public abstract class ServerWorldMixin {
|
public abstract class ServerWorldMixin extends World {
|
||||||
|
protected ServerWorldMixin(MutableWorldProperties properties, RegistryKey<World> registryRef, DynamicRegistryManager registryManager,
|
||||||
|
RegistryEntry<DimensionType> dimensionEntry, boolean isClient, boolean debugWorld, long seed,
|
||||||
|
int maxChainedNeighborUpdates) {
|
||||||
|
super(properties, registryRef, registryManager, dimensionEntry, isClient, debugWorld, seed, maxChainedNeighborUpdates);
|
||||||
|
}
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
public abstract WorldTickScheduler<Block> getBlockTickScheduler();
|
public abstract WorldTickScheduler<Block> getBlockTickScheduler();
|
||||||
|
|
||||||
@Shadow
|
@Shadow
|
||||||
public abstract WorldTickScheduler<Fluid> getFluidTickScheduler();
|
public abstract WorldTickScheduler<Fluid> getFluidTickScheduler();
|
||||||
|
|
||||||
|
|
||||||
public Entity terra$spawnEntity(double x, double y, double z, EntityType entityType) {
|
public Entity terra$spawnEntity(double x, double y, double z, EntityType entityType) {
|
||||||
net.minecraft.entity.Entity entity = ((net.minecraft.entity.EntityType<?>) entityType).create(null, SpawnReason.CHUNK_GENERATION);
|
net.minecraft.entity.Entity entity = ((net.minecraft.entity.EntityType<?>) entityType).create(null, SpawnReason.CHUNK_GENERATION);
|
||||||
entity.setPos(x, y, z);
|
entity.setPos(x, y, z);
|
||||||
((net.minecraft.server.world.ServerWorld) (Object) this).spawnEntity(entity);
|
spawnEntity(entity);
|
||||||
return (Entity) entity;
|
return (Entity) entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,10 +89,30 @@ public abstract class ServerWorldMixin {
|
|||||||
int flags = physics ? 3 : 1042;
|
int flags = physics ? 3 : 1042;
|
||||||
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
boolean isExtended = data.isExtended() && data.getClass().equals(BlockStateArgument.class);
|
||||||
if (isExtended) {
|
if (isExtended) {
|
||||||
((BlockStateArgument) data).setBlockState(((net.minecraft.server.world.ServerWorld) (Object) this), blockPos, flags);
|
BlockStateArgument arg = ((BlockStateArgument) data);
|
||||||
|
net.minecraft.block.BlockState state = arg.getBlockState();
|
||||||
|
setBlockState(blockPos, state, flags);
|
||||||
|
net.minecraft.world.chunk.Chunk chunk = getChunk(blockPos);
|
||||||
|
net.minecraft.block.entity.BlockEntity blockEntity;
|
||||||
|
NbtCompound nbt = ((NbtCompound) (Object) ((BlockStateExtended)data).getData());
|
||||||
|
if ("DUMMY".equals(nbt.getString("id", ""))) {
|
||||||
|
if (state.hasBlockEntity()) {
|
||||||
|
blockEntity = ((BlockEntityProvider)state.getBlock()).createBlockEntity(blockPos, state);
|
||||||
} else {
|
} else {
|
||||||
((net.minecraft.server.world.ServerWorld) (Object) this).setBlockState(blockPos, (net.minecraft.block.BlockState) data, flags);
|
blockEntity = null;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
blockEntity = net.minecraft.block.entity.BlockEntity.createFromNbt(blockPos, state, nbt, getRegistryManager());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blockEntity != null) {
|
||||||
|
blockEntity.setWorld(this);
|
||||||
|
chunk.setBlockEntity(blockEntity);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setBlockState(blockPos, (net.minecraft.block.BlockState) data, flags);
|
||||||
|
}
|
||||||
|
|
||||||
if(physics) {
|
if(physics) {
|
||||||
net.minecraft.block.BlockState state = isExtended ? ((BlockStateArgument) data).getBlockState() : ((net.minecraft.block.BlockState) data);
|
net.minecraft.block.BlockState state = isExtended ? ((BlockStateArgument) data).getBlockState() : ((net.minecraft.block.BlockState) data);
|
||||||
if(state.isLiquid()) {
|
if(state.isLiquid()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user