From 56b349ead808cf86357a6b7d4cfbf023a94d582e Mon Sep 17 00:00:00 2001 From: sk89q Date: Wed, 9 Jul 2014 14:14:17 -0700 Subject: [PATCH] Add a new block metadata framework and fix //rotate and //flip. Remove the previous Mapping interfaces. --- .../sk89q/worldedit/bukkit/BukkitWorld.java | 105 +- .../com/sk89q/worldedit/forge/ForgeWorld.java | 55 +- .../com/sk89q/worldedit/LocalSession.java | 18 +- .../java/com/sk89q/worldedit/WorldEdit.java | 8 +- .../sk89q/worldedit/blocks/BlockMaterial.java | 71 + .../worldedit/command/ClipboardCommands.java | 22 +- .../command/tool/brush/ClipboardBrush.java | 23 +- .../transform/BlockTransformExtent.java | 181 + .../worldedit/internal/LocalWorldAdapter.java | 45 +- .../com/sk89q/worldedit/math/MathUtils.java | 9 + .../math/transform/AffineTransform.java | 6 + .../worldedit/math/transform/Transform.java | 11 +- .../worldedit/session/ClipboardHolder.java | 26 +- .../sk89q/worldedit/session/PasteBuilder.java | 102 + .../worldedit/util/gson/VectorAdapter.java | 49 + .../com/sk89q/worldedit/world/NullWorld.java | 37 +- .../java/com/sk89q/worldedit/world/World.java | 22 +- .../worldedit/world/mapping/Mapping.java | 114 - .../world/registry/BlockRegistry.java | 69 + .../world/registry/BundledBlockData.java | 189 + .../world/registry/LegacyBlockRegistry.java | 63 + .../world/registry/LegacyWorldData.java | 51 + .../world/registry/SimpleBlockMaterial.java | 246 + .../worldedit/world/registry/SimpleState.java | 71 + .../world/registry/SimpleStateValue.java | 55 + .../Resolver.java => registry/State.java} | 43 +- .../worldedit/world/registry/StateValue.java | 56 + .../WorldData.java} | 29 +- .../worldedit/world/registry/blocks.json | 5968 +++++++++++++++++ 29 files changed, 7425 insertions(+), 319 deletions(-) create mode 100644 src/main/java/com/sk89q/worldedit/blocks/BlockMaterial.java create mode 100644 src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java create mode 100644 src/main/java/com/sk89q/worldedit/session/PasteBuilder.java create mode 100644 src/main/java/com/sk89q/worldedit/util/gson/VectorAdapter.java delete mode 100644 src/main/java/com/sk89q/worldedit/world/mapping/Mapping.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/BundledBlockData.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/LegacyBlockRegistry.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/LegacyWorldData.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/SimpleState.java create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/SimpleStateValue.java rename src/main/java/com/sk89q/worldedit/world/{mapping/Resolver.java => registry/State.java} (51%) create mode 100644 src/main/java/com/sk89q/worldedit/world/registry/StateValue.java rename src/main/java/com/sk89q/worldedit/world/{mapping/NullResolver.java => registry/WorldData.java} (64%) create mode 100644 src/main/resources/com/sk89q/worldedit/world/registry/blocks.json diff --git a/src/bukkit/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/src/bukkit/java/com/sk89q/worldedit/bukkit/BukkitWorld.java index 458aa8477..72a774ede 100644 --- a/src/bukkit/java/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/src/bukkit/java/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -19,24 +19,67 @@ package com.sk89q.worldedit.bukkit; -import com.sk89q.worldedit.*; +import com.sk89q.worldedit.BiomeType; +import com.sk89q.worldedit.BlockVector2D; +import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.EntityType; +import com.sk89q.worldedit.LocalEntity; +import com.sk89q.worldedit.LocalWorld; import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.blocks.*; +import com.sk89q.worldedit.Vector2D; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BaseItemStack; +import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.blocks.ContainerBlock; +import com.sk89q.worldedit.blocks.FurnaceBlock; +import com.sk89q.worldedit.blocks.LazyBlock; +import com.sk89q.worldedit.blocks.MobSpawnerBlock; import com.sk89q.worldedit.blocks.NoteBlock; +import com.sk89q.worldedit.blocks.SignBlock; +import com.sk89q.worldedit.blocks.SkullBlock; import com.sk89q.worldedit.bukkit.entity.BukkitEntity; -import com.sk89q.worldedit.entity.*; +import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.TreeGenerator; -import com.sk89q.worldedit.world.mapping.NullResolver; -import com.sk89q.worldedit.world.mapping.Resolver; -import org.bukkit.*; +import com.sk89q.worldedit.world.registry.LegacyWorldData; +import com.sk89q.worldedit.world.registry.WorldData; +import org.bukkit.Bukkit; +import org.bukkit.Effect; import org.bukkit.Location; -import org.bukkit.block.*; +import org.bukkit.Material; +import org.bukkit.SkullType; +import org.bukkit.TreeType; +import org.bukkit.World; +import org.bukkit.block.Biome; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.block.Chest; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.Furnace; +import org.bukkit.block.Sign; +import org.bukkit.block.Skull; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.*; +import org.bukkit.entity.Ambient; +import org.bukkit.entity.Animals; +import org.bukkit.entity.Boat; import org.bukkit.entity.Entity; +import org.bukkit.entity.ExperienceOrb; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Golem; +import org.bukkit.entity.Hanging; +import org.bukkit.entity.HumanEntity; +import org.bukkit.entity.Item; +import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Minecart; +import org.bukkit.entity.Painting; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.entity.Tameable; +import org.bukkit.entity.Villager; import org.bukkit.inventory.DoubleChestInventory; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -49,7 +92,14 @@ import java.io.InputStream; import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.net.URL; -import java.util.*; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -1180,6 +1230,11 @@ public class BukkitWorld extends LocalWorld { return true; } + @Override + public WorldData getWorldData() { + return LegacyWorldData.getInstance(); + } + @Override public void simulateBlockMine(Vector pt) { getWorld().getBlockAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()).breakNaturally(); @@ -1280,38 +1335,6 @@ public class BukkitWorld extends LocalWorld { return super.setBlock(pt, block, notifyAdjacent); } - @Override - public Resolver getBlockMapping() { - return new NullResolver(); - } - - @Override - public Resolver getEntityMapping() { - return new NullResolver(); - } - - @Nullable - @Override - public T getMetaData(BaseBlock block, Class metaDataClass) { - return null; - } - - @Nullable - @Override - public T getMetaData(com.sk89q.worldedit.entity.Entity entity, Class metaDataClass) { - if (entity instanceof com.sk89q.worldedit.bukkit.BukkitEntity) { - return ((com.sk89q.worldedit.bukkit.BukkitEntity) entity).getMetaData(metaDataClass); - } - - return null; - } - - @Nullable - @Override - public T getMetaData(BaseEntity entity, Class metaDataClass) { - return null; - } - /** * @deprecated Use {@link #setBlock(Vector, BaseBlock, boolean)} */ diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java index 60f229bf0..5087799a7 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java @@ -20,7 +20,13 @@ package com.sk89q.worldedit.forge; import com.sk89q.jnbt.CompoundTag; -import com.sk89q.worldedit.*; +import com.sk89q.worldedit.BiomeType; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.EntityType; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.Vector2D; +import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.blocks.LazyBlock; @@ -30,14 +36,22 @@ import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.TreeGenerator.TreeType; import com.sk89q.worldedit.world.AbstractWorld; -import com.sk89q.worldedit.world.mapping.NullResolver; -import com.sk89q.worldedit.world.mapping.Resolver; +import com.sk89q.worldedit.world.registry.LegacyWorldData; +import com.sk89q.worldedit.world.registry.WorldData; import net.minecraft.block.Block; import net.minecraft.entity.EntityHanging; import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.IProjectile; -import net.minecraft.entity.item.*; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityFallingSand; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityItemFrame; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityPainting; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.monster.EntityGolem; import net.minecraft.entity.passive.EntityAmbientCreature; import net.minecraft.entity.passive.EntityAnimal; @@ -432,6 +446,11 @@ public class ForgeWorld extends AbstractWorld { return false; } + @Override + public WorldData getWorldData() { + return LegacyWorldData.getInstance(); + } + @Override public boolean isValidBlockType(int id) { return (id == 0) || (net.minecraft.block.Block.blocksList[id] != null); @@ -480,34 +499,6 @@ public class ForgeWorld extends AbstractWorld { } } - @Override - public Resolver getBlockMapping() { - return new NullResolver(); - } - - @Override - public Resolver getEntityMapping() { - return new NullResolver(); - } - - @Nullable - @Override - public T getMetaData(BaseBlock block, Class metaDataClass) { - return null; - } - - @Nullable - @Override - public T getMetaData(Entity entity, Class metaDataClass) { - return null; - } - - @Nullable - @Override - public T getMetaData(BaseEntity entity, Class metaDataClass) { - return null; - } - @Override public List getEntities() { List entities = new ArrayList(); diff --git a/src/main/java/com/sk89q/worldedit/LocalSession.java b/src/main/java/com/sk89q/worldedit/LocalSession.java index 650e29a16..0bf0bfeb3 100644 --- a/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -29,7 +29,6 @@ import com.sk89q.worldedit.command.tool.SinglePickaxe; import com.sk89q.worldedit.command.tool.Tool; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.extension.platform.Actor; -import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.inventory.BlockBag; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Masks; @@ -44,7 +43,12 @@ import com.sk89q.worldedit.session.request.Request; import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.snapshot.Snapshot; -import java.util.*; +import javax.annotation.Nullable; +import java.util.Calendar; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; +import java.util.TimeZone; /** * An instance of this represents the WorldEdit session of a user. A session @@ -326,7 +330,7 @@ public class LocalSession { * Gets the clipboard. * * @return clipboard, may be null - * @throws EmptyClipboardException + * @throws EmptyClipboardException thrown if no clipboard is set */ public ClipboardHolder getClipboard() throws EmptyClipboardException { if (clipboard == null) { @@ -338,10 +342,12 @@ public class LocalSession { /** * Sets the clipboard. * - * @param clipboard + *

Pass {@code null} to clear the clipboard.

+ * + * @param clipboard the clipboard, or null if the clipboard is to be cleared */ - public ClipboardHolder replaceClipboard(Clipboard clipboard) { - return this.clipboard = new ClipboardHolder(clipboard); + public void setClipboard(@Nullable ClipboardHolder clipboard) { + this.clipboard = clipboard; } /** diff --git a/src/main/java/com/sk89q/worldedit/WorldEdit.java b/src/main/java/com/sk89q/worldedit/WorldEdit.java index 2b451409d..2e3a4d2df 100644 --- a/src/main/java/com/sk89q/worldedit/WorldEdit.java +++ b/src/main/java/com/sk89q/worldedit/WorldEdit.java @@ -46,9 +46,14 @@ import com.sk89q.worldedit.session.SessionManager; import com.sk89q.worldedit.session.request.Request; import com.sk89q.worldedit.util.eventbus.EventBus; import com.sk89q.worldedit.util.logging.WorldEditPrefixHandler; +import com.sk89q.worldedit.world.registry.BundledBlockData; import javax.script.ScriptException; -import java.io.*; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -91,6 +96,7 @@ public class WorldEdit { static { WorldEditPrefixHandler.register("com.sk89q.worldedit"); getVersion(); + BundledBlockData.getInstance(); // Load block registry } private WorldEdit() { diff --git a/src/main/java/com/sk89q/worldedit/blocks/BlockMaterial.java b/src/main/java/com/sk89q/worldedit/blocks/BlockMaterial.java new file mode 100644 index 000000000..09c9f8716 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/blocks/BlockMaterial.java @@ -0,0 +1,71 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.blocks; + +/** + * Describes the material for a block. + */ +public interface BlockMaterial { + + boolean isRenderedAsNormalBlock(); + + boolean isFullCube(); + + boolean isOpaque(); + + boolean isPowerSource(); + + boolean isLiquid(); + + boolean isSolid(); + + float getHardness(); + + float getResistance(); + + float getSlipperiness(); + + boolean isGrassBlocking(); + + float getAmbientOcclusionLightValue(); + + int getLightOpacity(); + + int getLightValue(); + + boolean isFragileWhenPushed(); + + boolean isUnpushable(); + + boolean isAdventureModeExempt(); + + boolean isTicksRandomly(); + + boolean isUsingNeighborLight(); + + boolean isMovementBlocker(); + + boolean isBurnable(); + + boolean isToolRequired(); + + boolean isReplacedDuringPlacement(); + +} diff --git a/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java b/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java index ad7edfa6a..bc6ed59e9 100644 --- a/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java +++ b/src/main/java/com/sk89q/worldedit/command/ClipboardCommands.java @@ -32,9 +32,9 @@ import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.function.block.BlockReplace; -import com.sk89q.worldedit.function.mask.ExistingBlockMask; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.operation.ForwardExtentCopy; +import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operations; import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.internal.annotation.Direction; @@ -92,7 +92,7 @@ public class ClipboardCommands { copy.setSourceMask(mask); } Operations.completeLegacy(copy); - session.replaceClipboard(clipboard); + session.setClipboard(new ClipboardHolder(clipboard, editSession.getWorld().getWorldData())); player.print(region.getArea() + " block(s) were copied."); } @@ -124,7 +124,7 @@ public class ClipboardCommands { copy.setSourceMask(mask); } Operations.completeLegacy(copy); - session.replaceClipboard(clipboard); + session.setClipboard(new ClipboardHolder(clipboard, editSession.getWorld().getWorldData())); player.print(region.getArea() + " block(s) were copied."); } @@ -154,12 +154,12 @@ public class ClipboardCommands { Region region = clipboard.getRegion(); Vector to = atOrigin ? clipboard.getOrigin() : session.getPlacementPosition(player); - ForwardExtentCopy copy = new ForwardExtentCopy(clipboard, region, clipboard.getOrigin(), editSession, to); - copy.setTransform(holder.getTransform()); - if (ignoreAirBlocks) { - copy.setSourceMask(new ExistingBlockMask(clipboard)); - } - Operations.completeLegacy(copy); + Operation operation = holder + .createPaste(editSession, editSession.getWorld().getWorldData()) + .to(to) + .ignoreAirBlocks(ignoreAirBlocks) + .build(); + Operations.completeLegacy(operation); if (selectPasted) { Vector max = to.add(region.getMaximumPoint().subtract(region.getMinimumPoint())); @@ -169,7 +169,7 @@ public class ClipboardCommands { selector.explainRegionAdjust(player, session); } - player.print("The clipboard has been pasted at " + to.add(region.getMinimumPoint())); + player.print("The clipboard has been pasted at " + to); } @Command( @@ -252,7 +252,7 @@ public class ClipboardCommands { ) @CommandPermissions("worldedit.clipboard.clear") public void clearClipboard(Player player, LocalSession session, EditSession editSession) throws WorldEditException { - session.replaceClipboard(null); + session.setClipboard(null); player.print("Clipboard cleared."); } } diff --git a/src/main/java/com/sk89q/worldedit/command/tool/brush/ClipboardBrush.java b/src/main/java/com/sk89q/worldedit/command/tool/brush/ClipboardBrush.java index 9a792ee7b..a5692265e 100644 --- a/src/main/java/com/sk89q/worldedit/command/tool/brush/ClipboardBrush.java +++ b/src/main/java/com/sk89q/worldedit/command/tool/brush/ClipboardBrush.java @@ -23,8 +23,7 @@ import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.extent.clipboard.Clipboard; -import com.sk89q.worldedit.function.mask.ExistingBlockMask; -import com.sk89q.worldedit.function.operation.ForwardExtentCopy; +import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operations; import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.regions.Region; @@ -33,11 +32,11 @@ import com.sk89q.worldedit.session.ClipboardHolder; public class ClipboardBrush implements Brush { private ClipboardHolder holder; - private boolean noAir; + private boolean ignoreAirBlocks; - public ClipboardBrush(ClipboardHolder holder, boolean noAir) { + public ClipboardBrush(ClipboardHolder holder, boolean ignoreAirBlocks) { this.holder = holder; - this.noAir = noAir; + this.ignoreAirBlocks = ignoreAirBlocks; } @Override @@ -45,12 +44,14 @@ public class ClipboardBrush implements Brush { Clipboard clipboard = holder.getClipboard(); Region region = clipboard.getRegion(); Vector centerOffset = region.getCenter().subtract(clipboard.getOrigin()); - ForwardExtentCopy copy = new ForwardExtentCopy(clipboard, region, clipboard.getOrigin(), editSession, pos.subtract(centerOffset)); - copy.setTransform(holder.getTransform()); - if (noAir) { - copy.setSourceMask(new ExistingBlockMask(clipboard)); - } - Operations.completeLegacy(copy); + + Operation operation = holder + .createPaste(editSession, editSession.getWorld().getWorldData()) + .to(pos.subtract(centerOffset)) + .ignoreAirBlocks(ignoreAirBlocks) + .build(); + + Operations.completeLegacy(operation); } } diff --git a/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java b/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java new file mode 100644 index 000000000..cf9e9d85e --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/extent/transform/BlockTransformExtent.java @@ -0,0 +1,181 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.extent.transform; + +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.WorldEditException; +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.math.transform.Transform; +import com.sk89q.worldedit.world.registry.BlockRegistry; +import com.sk89q.worldedit.world.registry.State; +import com.sk89q.worldedit.world.registry.StateValue; + +import javax.annotation.Nullable; +import java.util.Map; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Transforms blocks themselves (but not their position) according to a + * given transform. + */ +public class BlockTransformExtent extends AbstractDelegateExtent { + + private static final double RIGHT_ANGLE = Math.toRadians(90); + + private final Transform transform; + private final BlockRegistry blockRegistry; + + /** + * Create a new instance. + * + * @param extent the extent + * @param blockRegistry the block registry used for block direction data + */ + public BlockTransformExtent(Extent extent, Transform transform, BlockRegistry blockRegistry) { + super(extent); + checkNotNull(transform); + checkNotNull(blockRegistry); + this.transform = transform; + this.blockRegistry = blockRegistry; + } + + /** + * Get the transform. + * + * @return the transform + */ + public Transform getTransform() { + return transform; + } + + /** + * Transform a block without making a copy. + * + * @param block the block + * @param reverse true to transform in the opposite direction + * @return the same block + */ + private BaseBlock transformBlock(BaseBlock block, boolean reverse) { + transform(block, reverse ? transform.inverse() : transform, blockRegistry); + return block; + } + + @Override + public BaseBlock getBlock(Vector position) { + return transformBlock(super.getBlock(position), false); + } + + @Override + public BaseBlock getLazyBlock(Vector position) { + return transformBlock(super.getLazyBlock(position), false); + } + + @Override + public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException { + return super.setBlock(location, transformBlock(new BaseBlock(block), true)); + } + + + /** + * Transform the given block using the given transform. + * + *

The provided block is modified.

+ * + * @param block the block + * @param transform the transform + * @param registry the registry + * @return the same block + */ + private static BaseBlock transform(BaseBlock block, Transform transform, BlockRegistry registry) { + return transform(block, transform, registry, block); + } + + /** + * Transform the given block using the given transform. + * + * @param block the block + * @param transform the transform + * @param registry the registry + * @param changedBlock the block to change + * @return the changed block + */ + private static BaseBlock transform(BaseBlock block, Transform transform, BlockRegistry registry, BaseBlock changedBlock) { + checkNotNull(block); + checkNotNull(transform); + checkNotNull(registry); + + Map states = registry.getStates(block); + + if (states == null) { + return changedBlock; + } + + for (State state : states.values()) { + if (state.hasDirection()) { + StateValue value = state.getValue(block); + if (value != null && value.getDirection() != null) { + StateValue newValue = getNewStateValue(state, transform, value.getDirection()); + if (newValue != null) { + newValue.set(changedBlock); + } + } + } + } + + return changedBlock; + } + + /** + * Get the new value with the transformed direction. + * + * @param state the state + * @param transform the transform + * @param oldDirection the old direction to transform + * @return a new state or null if none could be found + */ + @Nullable + private static StateValue getNewStateValue(State state, Transform transform, Vector oldDirection) { + Vector newDirection = transform.apply(oldDirection).normalize(); + StateValue newValue = null; + double closest = -2; + boolean found = false; + + for (StateValue v : state.valueMap().values()) { + if (v.getDirection() != null) { + double dot = v.getDirection().normalize().dot(newDirection); + if (dot >= closest) { + closest = dot; + newValue = v; + found = true; + } + } + } + + if (found) { + return newValue; + } else { + return null; + } + } + +} diff --git a/src/main/java/com/sk89q/worldedit/internal/LocalWorldAdapter.java b/src/main/java/com/sk89q/worldedit/internal/LocalWorldAdapter.java index 3b7025003..dd04767b5 100644 --- a/src/main/java/com/sk89q/worldedit/internal/LocalWorldAdapter.java +++ b/src/main/java/com/sk89q/worldedit/internal/LocalWorldAdapter.java @@ -19,7 +19,16 @@ package com.sk89q.worldedit.internal; -import com.sk89q.worldedit.*; +import com.sk89q.worldedit.BiomeType; +import com.sk89q.worldedit.BlockVector2D; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.EntityType; +import com.sk89q.worldedit.LocalEntity; +import com.sk89q.worldedit.LocalWorld; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.Vector2D; +import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.entity.BaseEntity; @@ -30,7 +39,7 @@ import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.TreeGenerator.TreeType; import com.sk89q.worldedit.world.World; -import com.sk89q.worldedit.world.mapping.Resolver; +import com.sk89q.worldedit.world.registry.WorldData; import javax.annotation.Nullable; import java.util.List; @@ -259,6 +268,11 @@ public class LocalWorldAdapter extends LocalWorld { return world.queueBlockBreakEffect(server, position, blockId, priority); } + @Override + public WorldData getWorldData() { + return world.getWorldData(); + } + @Override public boolean equals(Object other) { return world.equals(other); @@ -313,33 +327,6 @@ public class LocalWorldAdapter extends LocalWorld { public Operation commit() { return world.commit(); } - @Override - public Resolver getBlockMapping() { - return world.getBlockMapping(); - } - - @Override - public Resolver getEntityMapping() { - return world.getEntityMapping(); - } - - @Override - @Nullable - public T getMetaData(BaseBlock block, Class metaDataClass) { - return world.getMetaData(block, metaDataClass); - } - - @Override - @Nullable - public T getMetaData(Entity entity, Class metaDataClass) { - return world.getMetaData(entity, metaDataClass); - } - - @Override - @Nullable - public T getMetaData(BaseEntity entity, Class metaDataClass) { - return world.getMetaData(entity, metaDataClass); - } @Override @Nullable diff --git a/src/main/java/com/sk89q/worldedit/math/MathUtils.java b/src/main/java/com/sk89q/worldedit/math/MathUtils.java index 992a5e955..568019499 100644 --- a/src/main/java/com/sk89q/worldedit/math/MathUtils.java +++ b/src/main/java/com/sk89q/worldedit/math/MathUtils.java @@ -24,6 +24,15 @@ package com.sk89q.worldedit.math; */ public final class MathUtils { + /** + * Safe minimum, such that 1 / SAFE_MIN does not overflow. + *

+ * In IEEE 754 arithmetic, this is also the smallest normalized number + * 2-1022. The value of this constant is from Apache Commons + * Math 2.2. + */ + public static final double SAFE_MIN = 0x1.0p-1022; + private MathUtils() { } diff --git a/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java b/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java index 63e3d8ded..eecdcc6cc 100644 --- a/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java +++ b/src/main/java/com/sk89q/worldedit/math/transform/AffineTransform.java @@ -292,6 +292,10 @@ public class AffineTransform implements Transform { vector.getX() * m20 + vector.getY() * m21 + vector.getZ() * m22 + m23); } + public AffineTransform combine(AffineTransform other) { + return concatenate(other); + } + @Override public Transform combine(Transform other) { if (other instanceof AffineTransform) { @@ -305,4 +309,6 @@ public class AffineTransform implements Transform { public String toString() { return String.format("Affine[%g %g %g %g, %g %g %g %g, %g %g %g %g]}", m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23); } + + } \ No newline at end of file diff --git a/src/main/java/com/sk89q/worldedit/math/transform/Transform.java b/src/main/java/com/sk89q/worldedit/math/transform/Transform.java index 05a7d5196..cb3109879 100644 --- a/src/main/java/com/sk89q/worldedit/math/transform/Transform.java +++ b/src/main/java/com/sk89q/worldedit/math/transform/Transform.java @@ -19,13 +19,20 @@ package com.sk89q.worldedit.math.transform; -import com.google.common.base.Function; import com.sk89q.worldedit.Vector; /** * Makes a transformation of {@link Vector}s. */ -public interface Transform extends Function { +public interface Transform { + + /** + * Returns the result of applying the function to the input. + * + * @param input the input + * @return the result + */ + Vector apply(Vector input); /** * Create a new inverse transform. diff --git a/src/main/java/com/sk89q/worldedit/session/ClipboardHolder.java b/src/main/java/com/sk89q/worldedit/session/ClipboardHolder.java index b2b10561f..37bb50de8 100644 --- a/src/main/java/com/sk89q/worldedit/session/ClipboardHolder.java +++ b/src/main/java/com/sk89q/worldedit/session/ClipboardHolder.java @@ -19,9 +19,11 @@ package com.sk89q.worldedit.session; +import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.math.transform.Identity; import com.sk89q.worldedit.math.transform.Transform; +import com.sk89q.worldedit.world.registry.WorldData; import static com.google.common.base.Preconditions.checkNotNull; @@ -30,6 +32,7 @@ import static com.google.common.base.Preconditions.checkNotNull; */ public class ClipboardHolder { + private final WorldData worldData; private final Clipboard clipboard; private Transform transform = new Identity(); @@ -37,10 +40,22 @@ public class ClipboardHolder { * Create a new instance with the given clipboard. * * @param clipboard the clipboard + * @param worldData the mapping of blocks, entities, and so on */ - public ClipboardHolder(Clipboard clipboard) { + public ClipboardHolder(Clipboard clipboard, WorldData worldData) { checkNotNull(clipboard); + checkNotNull(worldData); this.clipboard = clipboard; + this.worldData = worldData; + } + + /** + * Get the mapping used for blocks, entities, and so on. + * + * @return the mapping + */ + public WorldData getWorldData() { + return worldData; } /** @@ -74,4 +89,13 @@ public class ClipboardHolder { return transform; } + /** + * Create a builder for an operation to paste this clipboard. + * + * @return a builder + */ + public PasteBuilder createPaste(Extent targetExtent, WorldData targetWorldData) { + return new PasteBuilder(this, targetExtent, targetWorldData); + } + } diff --git a/src/main/java/com/sk89q/worldedit/session/PasteBuilder.java b/src/main/java/com/sk89q/worldedit/session/PasteBuilder.java new file mode 100644 index 000000000..571387cf5 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/session/PasteBuilder.java @@ -0,0 +1,102 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.session; + +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.extent.clipboard.Clipboard; +import com.sk89q.worldedit.extent.transform.BlockTransformExtent; +import com.sk89q.worldedit.function.mask.ExistingBlockMask; +import com.sk89q.worldedit.function.operation.ForwardExtentCopy; +import com.sk89q.worldedit.function.operation.Operation; +import com.sk89q.worldedit.math.transform.Transform; +import com.sk89q.worldedit.world.registry.WorldData; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Builds an operation to paste the contents of a clipboard. + */ +public class PasteBuilder { + + private final Clipboard clipboard; + private final WorldData worldData; + private final Transform transform; + private final Extent targetExtent; + private final WorldData targetWorldData; + + private Vector to = new Vector(); + private boolean ignoreAirBlocks; + + /** + * Create a new instance. + * + * @param holder the clipboard holder + * @param targetExtent + * @param targetWorldData + */ + PasteBuilder(ClipboardHolder holder, Extent targetExtent, WorldData targetWorldData) { + checkNotNull(holder); + checkNotNull(targetExtent); + checkNotNull(targetWorldData); + this.clipboard = holder.getClipboard(); + this.worldData = holder.getWorldData(); + this.transform = holder.getTransform(); + this.targetExtent = targetExtent; + this.targetWorldData = targetWorldData; + } + + /** + * Set the target location. + * + * @param to the target location + * @return this builder instance + */ + public PasteBuilder to(Vector to) { + this.to = to; + return this; + } + + /** + * Set whether air blocks in the source are skipped over when pasting. + * + * @return this builder instance + */ + public PasteBuilder ignoreAirBlocks(boolean ignoreAirBlocks) { + this.ignoreAirBlocks = ignoreAirBlocks; + return this; + } + + /** + * Build the operation. + * + * @return the operation + */ + public Operation build() { + BlockTransformExtent extent = new BlockTransformExtent(clipboard, transform, targetWorldData.getBlockRegistry()); + ForwardExtentCopy copy = new ForwardExtentCopy(extent, clipboard.getRegion(), clipboard.getOrigin(), targetExtent, to); + copy.setTransform(transform); + if (ignoreAirBlocks) { + copy.setSourceMask(new ExistingBlockMask(clipboard)); + } + return copy; + } + +} diff --git a/src/main/java/com/sk89q/worldedit/util/gson/VectorAdapter.java b/src/main/java/com/sk89q/worldedit/util/gson/VectorAdapter.java new file mode 100644 index 000000000..a1e876dfe --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/util/gson/VectorAdapter.java @@ -0,0 +1,49 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.util.gson; + +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.sk89q.worldedit.Vector; + +import java.lang.reflect.Type; + +/** + * Deserializes {@code Vector}s for GSON. + */ +public class VectorAdapter implements JsonDeserializer { + + @Override + public Vector deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + JsonArray jsonArray = json.getAsJsonArray(); + if (jsonArray.size() != 3) { + throw new JsonParseException("Expected array of 3 length for Vector"); + } + + double x = jsonArray.get(0).getAsDouble(); + double y = jsonArray.get(1).getAsDouble(); + double z = jsonArray.get(2).getAsDouble(); + + return new Vector(x, y, z); + } +} diff --git a/src/main/java/com/sk89q/worldedit/world/NullWorld.java b/src/main/java/com/sk89q/worldedit/world/NullWorld.java index 35cc1a863..937ba9c3b 100644 --- a/src/main/java/com/sk89q/worldedit/world/NullWorld.java +++ b/src/main/java/com/sk89q/worldedit/world/NullWorld.java @@ -28,8 +28,8 @@ import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.TreeGenerator.TreeType; -import com.sk89q.worldedit.world.mapping.NullResolver; -import com.sk89q.worldedit.world.mapping.Resolver; +import com.sk89q.worldedit.world.registry.LegacyWorldData; +import com.sk89q.worldedit.world.registry.WorldData; import javax.annotation.Nullable; import java.util.Collections; @@ -94,6 +94,11 @@ public class NullWorld extends AbstractWorld { return false; } + @Override + public WorldData getWorldData() { + return LegacyWorldData.getInstance(); + } + @Override public BaseBlock getBlock(Vector position) { return new BaseBlock(BlockID.AIR); @@ -104,34 +109,6 @@ public class NullWorld extends AbstractWorld { return new BaseBlock(BlockID.AIR); } - @Override - public Resolver getBlockMapping() { - return new NullResolver(); - } - - @Override - public Resolver getEntityMapping() { - return new NullResolver(); - } - - @Nullable - @Override - public T getMetaData(BaseBlock block, Class metaDataClass) { - return null; - } - - @Nullable - @Override - public T getMetaData(Entity entity, Class metaDataClass) { - return null; - } - - @Nullable - @Override - public T getMetaData(BaseEntity entity, Class metaDataClass) { - return null; - } - @Override public List getEntities() { return Collections.emptyList(); diff --git a/src/main/java/com/sk89q/worldedit/world/World.java b/src/main/java/com/sk89q/worldedit/world/World.java index 3bd5fd97a..eb12f7f71 100644 --- a/src/main/java/com/sk89q/worldedit/world/World.java +++ b/src/main/java/com/sk89q/worldedit/world/World.java @@ -19,7 +19,16 @@ package com.sk89q.worldedit.world; -import com.sk89q.worldedit.*; +import com.sk89q.worldedit.BiomeType; +import com.sk89q.worldedit.BlockVector2D; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.EntityType; +import com.sk89q.worldedit.LocalEntity; +import com.sk89q.worldedit.LocalWorld; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.Vector2D; +import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.blocks.BaseBlock; import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.extension.platform.Platform; @@ -28,12 +37,12 @@ import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.util.TreeGenerator; import com.sk89q.worldedit.util.TreeGenerator.TreeType; -import com.sk89q.worldedit.world.mapping.Mapping; +import com.sk89q.worldedit.world.registry.WorldData; /** * Represents a world (dimension). */ -public interface World extends Extent, Mapping { +public interface World extends Extent { /** * Get the name of the world. @@ -346,6 +355,13 @@ public interface World extends Extent, Mapping { */ boolean queueBlockBreakEffect(Platform server, Vector position, int blockId, double priority); + /** + * Get the data for blocks and so on for this world. + * + * @return the world data + */ + WorldData getWorldData(); + @Override boolean equals(Object other); diff --git a/src/main/java/com/sk89q/worldedit/world/mapping/Mapping.java b/src/main/java/com/sk89q/worldedit/world/mapping/Mapping.java deleted file mode 100644 index 401ab94a7..000000000 --- a/src/main/java/com/sk89q/worldedit/world/mapping/Mapping.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * WorldEdit, a Minecraft world manipulation toolkit - * Copyright (C) sk89q - * Copyright (C) WorldEdit team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldedit.world.mapping; - -import com.sk89q.worldedit.blocks.BaseBlock; -import com.sk89q.worldedit.entity.BaseEntity; -import com.sk89q.worldedit.entity.Entity; -import com.sk89q.worldedit.entity.metadata.Tameable; - -import javax.annotation.Nullable; - -/** - * A mapping can create state objects (such as {@link BaseBlock}) - * from implementation-independent identifiers (such as "minecraft.stone"), - * as well as perform the opposite task of retrieving - * the identifier for a given state object (whenever possible at least, because - * a mapping may not be compatible with a set of state objects that may have - * come from another implementation). In addition, a mapping may be able to - * retrieve a variety of metadata objects (such as {@link Tameable}) to - * describe a given state object. - *

- * However, it may be possible that a mapping be "dumb" and not be able to, - * for example, return a {@link Tameable} for a "Horse" entity, simply because - * it has not be implemented. Any code that queries a mapping must be - * aware of this and act accordingly. - */ -public interface Mapping { - - /** - * Get the mapping for block identifiers. - * - * @return a block mapping - */ - Resolver getBlockMapping(); - - /** - * Get the mapping for entity identifiers. - * - * @return an entity mapping - */ - Resolver getEntityMapping(); - - /** - * Attempt to return an instance of the given class for the given block. - * For example, {@code getMetaData(block, Inventory.class)} might return - * an instance if the block happens to contain an inventory. - *

- * If the given block is not of the given class (i.e. a dirt block does - * not have an inventory) or if the information is simply not available, - * {@code null} will be returned. - *

- * Mutator methods on the returned instance should change the block. - * - * @param block the block - * @param metaDataClass the metadata class for the returned instance - * @param the metadata class - * @return an instance of the given class, otherwise null - */ - @Nullable T getMetaData(BaseBlock block, Class metaDataClass); - - /** - * Attempt to return an instance of the given class for the given entity. - * For example, {@code getMetaData(entity, Creature.class)} might return - * an instance if the entity happens to be a creature. - *

- * If the given entity is not of the given class (i.e. a painting is - * not a creature) or if the information is simply not available, - * {@code null} will be returned. - *

- * Mutator methods on the returned instance should change the entity. - * - * @param entity the entity - * @param metaDataClass the metadata class for the returned instance - * @param the metadata class - * @return an instance of the given class, otherwise null - */ - @Nullable T getMetaData(Entity entity, Class metaDataClass); - - /** - * Attempt to return an instance of the given class for the given entity. - * For example, {@code getMetaData(entity, Creature.class)} might return - * an instance if the entity happens to be a creature. - *

- * If the given entity is not of the given class (i.e. a painting is - * not a creature) or if the information is simply not available, - * {@code null} will be returned. - *

- * Mutator methods on the returned instance should change the entity. - * - * @param entity the entity - * @param metaDataClass the metadata class for the returned instance - * @param the metadata class - * @return an instance of the given class, otherwise null - */ - @Nullable T getMetaData(BaseEntity entity, Class metaDataClass); - -} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java b/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java new file mode 100644 index 000000000..7448835cf --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/BlockRegistry.java @@ -0,0 +1,69 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockMaterial; + +import javax.annotation.Nullable; +import java.util.Map; + +/** + * Provides information on blocks and provides methods to create them. + */ +public interface BlockRegistry { + + /** + * Create a new block using its ID. + * + * @param id the id + * @return the block, which may be null if no block exists + */ + @Nullable + BaseBlock createFromId(String id); + + /** + * Create a new block using its legacy numeric ID. + * + * @param id the id + * @return the block, which may be null if no block exists + */ + @Nullable + BaseBlock createFromId(int id); + + /** + * Get the material for the given block. + * + * @param block the block + * @return the material, or null if the material information is not known + */ + @Nullable + BlockMaterial getMaterial(BaseBlock block); + + /** + * Get an unmodifiable map of states for this block. + * + * @param block the block + * @return a map of states where the key is the state's ID + */ + @Nullable + Map getStates(BaseBlock block); + +} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockData.java b/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockData.java new file mode 100644 index 000000000..a111d2592 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/BundledBlockData.java @@ -0,0 +1,189 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.google.common.io.Resources; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BlockMaterial; +import com.sk89q.worldedit.util.gson.VectorAdapter; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; + +import javax.annotation.Nullable; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.Charset; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Provides block data based on the built-in block database that is bundled + * with WorldEdit. + * + *

A new instance cannot be created. Use {@link #getInstance()} to get + * an instance.

+ * + *

The data is read from a JSON file that is bundled with WorldEdit. If + * reading fails (which occurs when this class is first instantiated), then + * the methods will return {@code null}s for all blocks.

+ */ +public class BundledBlockData { + + private static final Logger log = Logger.getLogger(BundledBlockData.class.getCanonicalName()); + private static final BundledBlockData INSTANCE = new BundledBlockData(); + + private final Map idMap = new HashMap(); + private final TIntObjectMap legacyMap = new TIntObjectHashMap(); + + /** + * Create a new instance. + */ + private BundledBlockData() { + try { + loadFromResource(); + } catch (IOException e) { + log.log(Level.WARNING, "Failed to load the built-in block registry", e); + } + } + + /** + * Attempt to load the data from file. + * + * @throws IOException thrown on I/O error + */ + private void loadFromResource() throws IOException { + GsonBuilder gsonBuilder = new GsonBuilder(); + gsonBuilder.registerTypeAdapter(Vector.class, new VectorAdapter()); + Gson gson = gsonBuilder.create(); + URL url = BundledBlockData.class.getResource("blocks.json"); + if (url == null) { + throw new IOException("Could not find blocks.json"); + } + String data = Resources.toString(url, Charset.defaultCharset()); + List entries = gson.fromJson(data, new TypeToken>() {}.getType()); + + for (BlockEntry entry : entries) { + entry.postDeserialization(); + idMap.put(entry.id, entry); + legacyMap.put(entry.legacyId, entry); + } + } + + /** + * Return the entry for the given block ID. + * + * @param id the ID + * @return the entry, or null + */ + @Nullable + private BlockEntry findById(String id) { + return idMap.get(id); + } + + /** + * Return the entry for the given block legacy numeric ID. + * + * @param id the ID + * @return the entry, or null + */ + @Nullable + private BlockEntry findById(int id) { + return legacyMap.get(id); + } + + /** + * Convert the given string ID to a legacy numeric ID. + * + * @param id the ID + * @return the legacy ID, which may be null if the block does not have a legacy ID + */ + @Nullable + public Integer toLegacyId(String id) { + BlockEntry entry = findById(id); + if (entry != null) { + return entry.legacyId; + } else { + return null; + } + } + + /** + * Get the material properties for the given block. + * + * @param id the legacy numeric ID + * @return the material's properties, or null + */ + @Nullable + public BlockMaterial getMaterialById(int id) { + BlockEntry entry = findById(id); + if (entry != null) { + return entry.material; + } else { + return null; + } + } + + /** + * Get the states for the given block. + * + * @param id the legacy numeric ID + * @return the block's states, or null if no information is available + */ + @Nullable + public Map getStatesById(int id) { + BlockEntry entry = findById(id); + if (entry != null) { + return entry.states; + } else { + return null; + } + } + + /** + * Get a singleton instance of this object. + * + * @return the instance + */ + public static BundledBlockData getInstance() { + return INSTANCE; + } + + private static class BlockEntry { + private int legacyId; + private String id; + private String unlocalizedName; + private List aliases; + private Map states = new HashMap(); + private SimpleBlockMaterial material = new SimpleBlockMaterial(); + + void postDeserialization() { + for (SimpleState state : states.values()) { + state.postDeserialization(); + } + } + } + +} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/LegacyBlockRegistry.java b/src/main/java/com/sk89q/worldedit/world/registry/LegacyBlockRegistry.java new file mode 100644 index 000000000..e846e7984 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/LegacyBlockRegistry.java @@ -0,0 +1,63 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.blocks.BlockMaterial; + +import javax.annotation.Nullable; +import java.util.Map; + +/** + * A block registry that uses {@link BundledBlockData} to serve information + * about blocks. + */ +public class LegacyBlockRegistry implements BlockRegistry { + + @Nullable + @Override + public BaseBlock createFromId(String id) { + Integer legacyId = BundledBlockData.getInstance().toLegacyId(id); + if (legacyId != null) { + return createFromId(legacyId); + } else { + return null; + } + } + + @Nullable + @Override + public BaseBlock createFromId(int id) { + return new BaseBlock(id); + } + + @Nullable + @Override + public BlockMaterial getMaterial(BaseBlock block) { + return BundledBlockData.getInstance().getMaterialById(block.getId()); + } + + @Nullable + @Override + public Map getStates(BaseBlock block) { + return BundledBlockData.getInstance().getStatesById(block.getId()); + } + +} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/LegacyWorldData.java b/src/main/java/com/sk89q/worldedit/world/registry/LegacyWorldData.java new file mode 100644 index 000000000..21ce1ad0d --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/LegacyWorldData.java @@ -0,0 +1,51 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +/** + * An implementation of {@link WorldData} that uses legacy numeric IDs and + * a built-in block database. + */ +public final class LegacyWorldData implements WorldData { + + private static final LegacyWorldData INSTANCE = new LegacyWorldData(); + private final LegacyBlockRegistry blockRegistry = new LegacyBlockRegistry(); + + /** + * Create a new instance. + */ + private LegacyWorldData() { + } + + @Override + public BlockRegistry getBlockRegistry() { + return blockRegistry; + } + + /** + * Get a singleton instance. + * + * @return an instance + */ + public static LegacyWorldData getInstance() { + return INSTANCE; + } + +} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java b/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java new file mode 100644 index 000000000..7b190c740 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/SimpleBlockMaterial.java @@ -0,0 +1,246 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.sk89q.worldedit.blocks.BlockMaterial; + +class SimpleBlockMaterial implements BlockMaterial { + + private boolean renderedAsNormalBlock; + private boolean fullCube; + private boolean opaque; + private boolean powerSource; + private boolean liquid; + private boolean solid; + private float hardness; + private float resistance; + private float slipperiness; + private boolean grassBlocking; + private float ambientOcclusionLightValue; + private int lightOpacity; + private int lightValue; + private boolean fragileWhenPushed; + private boolean unpushable; + private boolean adventureModeExempt; + private boolean ticksRandomly; + private boolean usingNeighborLight; + private boolean movementBlocker; + private boolean burnable; + private boolean toolRequired; + private boolean replacedDuringPlacement; + + @Override + public boolean isRenderedAsNormalBlock() { + return renderedAsNormalBlock; + } + + public void setRenderedAsNormalBlock(boolean renderedAsNormalBlock) { + this.renderedAsNormalBlock = renderedAsNormalBlock; + } + + @Override + public boolean isFullCube() { + return fullCube; + } + + public void setFullCube(boolean fullCube) { + this.fullCube = fullCube; + } + + @Override + public boolean isOpaque() { + return opaque; + } + + public void setOpaque(boolean opaque) { + this.opaque = opaque; + } + + @Override + public boolean isPowerSource() { + return powerSource; + } + + public void setPowerSource(boolean powerSource) { + this.powerSource = powerSource; + } + + @Override + public boolean isLiquid() { + return liquid; + } + + public void setLiquid(boolean liquid) { + this.liquid = liquid; + } + + @Override + public boolean isSolid() { + return solid; + } + + public void setSolid(boolean solid) { + this.solid = solid; + } + + @Override + public float getHardness() { + return hardness; + } + + public void setHardness(float hardness) { + this.hardness = hardness; + } + + @Override + public float getResistance() { + return resistance; + } + + public void setResistance(float resistance) { + this.resistance = resistance; + } + + @Override + public float getSlipperiness() { + return slipperiness; + } + + public void setSlipperiness(float slipperiness) { + this.slipperiness = slipperiness; + } + + @Override + public boolean isGrassBlocking() { + return grassBlocking; + } + + public void setGrassBlocking(boolean grassBlocking) { + this.grassBlocking = grassBlocking; + } + + @Override + public float getAmbientOcclusionLightValue() { + return ambientOcclusionLightValue; + } + + public void setAmbientOcclusionLightValue(float ambientOcclusionLightValue) { + this.ambientOcclusionLightValue = ambientOcclusionLightValue; + } + + @Override + public int getLightOpacity() { + return lightOpacity; + } + + public void setLightOpacity(int lightOpacity) { + this.lightOpacity = lightOpacity; + } + + @Override + public int getLightValue() { + return lightValue; + } + + public void setLightValue(int lightValue) { + this.lightValue = lightValue; + } + + @Override + public boolean isFragileWhenPushed() { + return fragileWhenPushed; + } + + public void setFragileWhenPushed(boolean fragileWhenPushed) { + this.fragileWhenPushed = fragileWhenPushed; + } + + @Override + public boolean isUnpushable() { + return unpushable; + } + + public void setUnpushable(boolean unpushable) { + this.unpushable = unpushable; + } + + @Override + public boolean isAdventureModeExempt() { + return adventureModeExempt; + } + + public void setAdventureModeExempt(boolean adventureModeExempt) { + this.adventureModeExempt = adventureModeExempt; + } + + @Override + public boolean isTicksRandomly() { + return ticksRandomly; + } + + public void setTicksRandomly(boolean ticksRandomly) { + this.ticksRandomly = ticksRandomly; + } + + @Override + public boolean isUsingNeighborLight() { + return usingNeighborLight; + } + + public void setUsingNeighborLight(boolean usingNeighborLight) { + this.usingNeighborLight = usingNeighborLight; + } + + @Override + public boolean isMovementBlocker() { + return movementBlocker; + } + + public void setMovementBlocker(boolean movementBlocker) { + this.movementBlocker = movementBlocker; + } + + @Override + public boolean isBurnable() { + return burnable; + } + + public void setBurnable(boolean burnable) { + this.burnable = burnable; + } + + @Override + public boolean isToolRequired() { + return toolRequired; + } + + public void setToolRequired(boolean toolRequired) { + this.toolRequired = toolRequired; + } + + @Override + public boolean isReplacedDuringPlacement() { + return replacedDuringPlacement; + } + + public void setReplacedDuringPlacement(boolean replacedDuringPlacement) { + this.replacedDuringPlacement = replacedDuringPlacement; + } +} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/SimpleState.java b/src/main/java/com/sk89q/worldedit/world/registry/SimpleState.java new file mode 100644 index 000000000..4cc78de9b --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/SimpleState.java @@ -0,0 +1,71 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.sk89q.worldedit.blocks.BaseBlock; + +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.Map; + +class SimpleState implements State { + + private Byte dataMask; + private Map values; + + @Override + public Map valueMap() { + return Collections.unmodifiableMap(values); + } + + @Nullable + @Override + public StateValue getValue(BaseBlock block) { + for (StateValue value : values.values()) { + if (value.isSet(block)) { + return value; + } + } + + return null; + } + + byte getDataMask() { + return dataMask != null ? dataMask : 0xF; + } + + @Override + public boolean hasDirection() { + for (SimpleStateValue value : values.values()) { + if (value.getDirection() != null) { + return true; + } + } + + return false; + } + + void postDeserialization() { + for (SimpleStateValue v : values.values()) { + v.setState(this); + } + } + +} diff --git a/src/main/java/com/sk89q/worldedit/world/registry/SimpleStateValue.java b/src/main/java/com/sk89q/worldedit/world/registry/SimpleStateValue.java new file mode 100644 index 000000000..791bc684a --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/SimpleStateValue.java @@ -0,0 +1,55 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseBlock; + +class SimpleStateValue implements StateValue { + + private SimpleState state; + private Byte data; + private Vector direction; + + void setState(SimpleState state) { + this.state = state; + } + + @Override + public boolean isSet(BaseBlock block) { + return data != null && (block.getData() & state.getDataMask()) == data; + } + + @Override + public boolean set(BaseBlock block) { + if (data != null) { + block.setData((block.getData() & ~state.getDataMask()) | data); + return true; + } else { + return false; + } + } + + @Override + public Vector getDirection() { + return direction; + } + +} diff --git a/src/main/java/com/sk89q/worldedit/world/mapping/Resolver.java b/src/main/java/com/sk89q/worldedit/world/registry/State.java similarity index 51% rename from src/main/java/com/sk89q/worldedit/world/mapping/Resolver.java rename to src/main/java/com/sk89q/worldedit/world/registry/State.java index 3acd80ab4..a8cbfde3c 100644 --- a/src/main/java/com/sk89q/worldedit/world/mapping/Resolver.java +++ b/src/main/java/com/sk89q/worldedit/world/registry/State.java @@ -17,40 +17,45 @@ * along with this program. If not, see . */ -package com.sk89q.worldedit.world.mapping; +package com.sk89q.worldedit.world.registry; import com.sk89q.worldedit.blocks.BaseBlock; import javax.annotation.Nullable; +import java.util.Map; /** - * A resolver can create state objects (such as {@link BaseBlock}) from - * universal identifiers, but also get the universal identifier for - * a given state object (at least when it is known). - *

- * Identifiers may be case-sensitive. Routines that work with IDs should - * not make changes to the casing of the IDs or perform case-insensitive - * comparisons. Implementations may normalize the casing of IDs if it - * is appropriate. + * Describes a state property of a block. * - * @param the type of state object + *

Example states include "variant" (indicating material or type) and + * "facing" (indicating orientation).

*/ -public interface Resolver { +public interface State { /** - * Create an instance of the state object from the given ID. + * Return a map of available values for this state. * - * @param id the ID - * @return an instance, otherwise null if an instance cannot be created + *

Keys are the value of state and map values describe that + * particular state value.

+ * + * @return the map of state values */ - @Nullable E create(String id); + Map valueMap(); /** - * Get the ID for the given object. + * Get the value that the block is set to. * - * @param object the object - * @return the ID, otherwise null if it is not known + * @param block the block + * @return the state, otherwise null if the block isn't set to any of the values */ - @Nullable String getId(E object); + @Nullable + StateValue getValue(BaseBlock block); + + /** + * Returns whether this state contains directional data. + * + * @return true if directional data is available + */ + boolean hasDirection(); } diff --git a/src/main/java/com/sk89q/worldedit/world/registry/StateValue.java b/src/main/java/com/sk89q/worldedit/world/registry/StateValue.java new file mode 100644 index 000000000..4e565cb19 --- /dev/null +++ b/src/main/java/com/sk89q/worldedit/world/registry/StateValue.java @@ -0,0 +1,56 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * Copyright (C) WorldEdit team and contributors + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.sk89q.worldedit.world.registry; + +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseBlock; + +import javax.annotation.Nullable; + +/** + * Describes a possible value for a {@code State}. + */ +public interface StateValue { + + /** + * Return whether this state is set on the given block. + * + * @param block the block + * @return true if this value is set + */ + boolean isSet(BaseBlock block); + + /** + * Set the state to this value on the given block. + * + * @param block the block to change + * @return true if the value was set successfully + */ + boolean set(BaseBlock block); + + /** + * Return the direction associated with this value. + * + * @return the direction, otherwise null + */ + @Nullable + Vector getDirection(); + +} diff --git a/src/main/java/com/sk89q/worldedit/world/mapping/NullResolver.java b/src/main/java/com/sk89q/worldedit/world/registry/WorldData.java similarity index 64% rename from src/main/java/com/sk89q/worldedit/world/mapping/NullResolver.java rename to src/main/java/com/sk89q/worldedit/world/registry/WorldData.java index c59beefdb..38bbe2a0e 100644 --- a/src/main/java/com/sk89q/worldedit/world/mapping/NullResolver.java +++ b/src/main/java/com/sk89q/worldedit/world/registry/WorldData.java @@ -17,28 +17,19 @@ * along with this program. If not, see . */ -package com.sk89q.worldedit.world.mapping; - -import javax.annotation.Nullable; +package com.sk89q.worldedit.world.registry; /** - * An implementation of a {@link Resolver} that knows nothing and returns - * {@code null} in all cases. - * - * @param the object to resolve + * Describes the necessary data for blocks, entities, and other objects + * on a world. */ -public class NullResolver implements Resolver { +public interface WorldData { - @Nullable - @Override - public E create(String id) { - return null; - } - - @Nullable - @Override - public String getId(E object) { - return null; - } + /** + * Get the block registry. + * + * @return the block registry + */ + BlockRegistry getBlockRegistry(); } diff --git a/src/main/resources/com/sk89q/worldedit/world/registry/blocks.json b/src/main/resources/com/sk89q/worldedit/world/registry/blocks.json new file mode 100644 index 000000000..92410c465 --- /dev/null +++ b/src/main/resources/com/sk89q/worldedit/world/registry/blocks.json @@ -0,0 +1,5968 @@ +[ + { + "legacyId": 0, + "id": "minecraft:air", + "unlocalizedName": "tile.air", + "material": { + "renderedAsNormalBlock": true, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 1, + "id": "minecraft:stone", + "unlocalizedName": "tile.stone", + "states": { + "variant": { + "values": { + "stone": { "data": 0 }, + "granite": { "data": 1 }, + "polished_granite": { "data": 2 }, + "diorite": { "data": 3 }, + "polished_diorite": { "data": 4 }, + "andesite": { "data": 5 }, + "polished_andesite": { "data": 6 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.5, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 2, + "id": "minecraft:grass", + "unlocalizedName": "tile.grass", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.6, + "resistance": 3.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 3, + "id": "minecraft:dirt", + "unlocalizedName": "tile.dirt", + "states": { + "variant": { + "values": { + "dirt": { "data": 0 }, + "coarse_dirt": { "data": 1 }, + "podzol": { "data": 2 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 4, + "id": "minecraft:cobblestone", + "unlocalizedName": "tile.stonebrick", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 5, + "id": "minecraft:planks", + "unlocalizedName": "tile.wood", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 6, + "id": "minecraft:sapling", + "unlocalizedName": "tile.sapling", + "states": { + "variant": { + "values": { + "oak": { "data": 0 }, + "spruce": { "data": 1 }, + "birch": { "data": 2 }, + "jungle": { "data": 3 }, + "acacia": { "data": 4 }, + "darkoak": { "data": 5 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 7, + "id": "minecraft:bedrock", + "unlocalizedName": "tile.bedrock", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": -1.0, + "resistance": 1.8E7, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 8, + "id": "minecraft:flowing_water", + "unlocalizedName": "tile.water", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": true, + "solid": false, + "hardness": 100.0, + "resistance": 500.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 3, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 9, + "id": "minecraft:water", + "unlocalizedName": "tile.water", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": true, + "solid": false, + "hardness": 100.0, + "resistance": 500.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 3, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 10, + "id": "minecraft:flowing_lava", + "unlocalizedName": "tile.lava", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": true, + "solid": false, + "hardness": 100.0, + "resistance": 500.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 15, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 11, + "id": "minecraft:lava", + "unlocalizedName": "tile.lava", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": true, + "solid": false, + "hardness": 100.0, + "resistance": 500.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 15, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 12, + "id": "minecraft:sand", + "unlocalizedName": "tile.sand", + "states": { + "variant": { + "values": { + "sand": { "data": 0 }, + "red_sand": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 13, + "id": "minecraft:gravel", + "unlocalizedName": "tile.gravel", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.6, + "resistance": 3.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 14, + "id": "minecraft:gold_ore", + "unlocalizedName": "tile.oreGold", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 15, + "id": "minecraft:iron_ore", + "unlocalizedName": "tile.oreIron", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 16, + "id": "minecraft:coal_ore", + "unlocalizedName": "tile.oreCoal", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 17, + "id": "minecraft:log", + "unlocalizedName": "tile.log", + "states": { + "variant": { + "dataMask": 3, + "values": { + "oak": { "data": 0 }, + "spruce": { "data": 1 }, + "birch": { "data": 2 }, + "jungle": { "data": 3 } + } + }, + "facing": { + "dataMask": 12, + "values": { + "up": { "data": 0, "direction": [0, 1, 0] }, + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 4, "direction": [1, 0, 0] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "north": { "data": 8, "direction": [0, 0, -1] }, + "south": { "data": 8, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 10.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 18, + "id": "minecraft:leaves", + "unlocalizedName": "tile.leaves", + "states": { + "variant": { + "dataMask": 3, + "values": { + "oak": { "data": 0 }, + "spruce": { "data": 1 }, + "birch": { "data": 2 }, + "jungle": { "data": 3 } + } + }, + "decay": { + "dataMask": 7, + "values": { + "no_decay": { "data": 4 }, + "decay": { "data": 0 } + } + }, + "check_decay": { + "dataMask": 12, + "values": { + "no_decay": { "data": 12 }, + "decay": { "data": 0 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 1, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 19, + "id": "minecraft:sponge", + "unlocalizedName": "tile.sponge", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.6, + "resistance": 3.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 20, + "id": "minecraft:glass", + "unlocalizedName": "tile.glass", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 21, + "id": "minecraft:lapis_ore", + "unlocalizedName": "tile.oreLapis", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 22, + "id": "minecraft:lapis_block", + "unlocalizedName": "tile.blockLapis", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 23, + "id": "minecraft:dispenser", + "unlocalizedName": "tile.dispenser", + "states": { + "facing": { + "dataMask": 7, + "values": { + "down": { "data": 0, "direction": [0, -1, 0] }, + "up": { "data": 1, "direction": [0, 1, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + }, + "powered": { + "dataMask": 8, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.5, + "resistance": 17.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 24, + "id": "minecraft:sandstone", + "unlocalizedName": "tile.sandStone", + "states": { + "variant": { + "values": { + "sandstone": { "data": 0 }, + "chiseled": { "data": 1 }, + "smooth": { "data": 2 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.8, + "resistance": 4.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 25, + "id": "minecraft:noteblock", + "unlocalizedName": "tile.musicBlock", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.8, + "resistance": 4.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 26, + "id": "minecraft:bed", + "unlocalizedName": "tile.bed", + "states": { + "facing": { + "dataMask": 3, + "values": { + "east": { "data": 3, "direction": [1, 0, 0] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 0, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 27, + "id": "minecraft:golden_rail", + "unlocalizedName": "tile.goldenRail", + "states": { + "facing": { + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "south": { "data": 1, "direction": [0, 0, 1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "east_ascending": { "data": 2, "direction": [1, 1, 0] }, + "east_descending": { "data": 2, "direction": [-1, -1, 0] }, + "west_ascending": { "data": 3, "direction": [-1, 1, 0] }, + "west_descending": { "data": 3, "direction": [1, -1, 0] }, + "north_ascending": { "data": 4, "direction": [0, 1, -1] }, + "north_descending": { "data": 4, "direction": [0, -1, 1] }, + "south_ascending": { "data": 5, "direction": [0, 1, 1] }, + "southeast": { "data": 6, "direction": [1, 0, 1] }, + "southwest": { "data": 7, "direction": [-1, 0, 1] }, + "northwest": { "data": 8, "direction": [-1, 0, -1] }, + "northeast": { "data": 9, "direction": [1, 0, -1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.7, + "resistance": 3.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 28, + "id": "minecraft:detector_rail", + "unlocalizedName": "tile.detectorRail", + "states": { + "facing": { + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "south": { "data": 1, "direction": [0, 0, 1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "east_ascending": { "data": 2, "direction": [1, 1, 0] }, + "east_descending": { "data": 2, "direction": [-1, -1, 0] }, + "west_ascending": { "data": 3, "direction": [-1, 1, 0] }, + "west_descending": { "data": 3, "direction": [1, -1, 0] }, + "north_ascending": { "data": 4, "direction": [0, 1, -1] }, + "north_descending": { "data": 4, "direction": [0, -1, 1] }, + "south_ascending": { "data": 5, "direction": [0, 1, 1] }, + "southeast": { "data": 6, "direction": [1, 0, 1] }, + "southwest": { "data": 7, "direction": [-1, 0, 1] }, + "northwest": { "data": 8, "direction": [-1, 0, -1] }, + "northeast": { "data": 9, "direction": [1, 0, -1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.7, + "resistance": 3.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 29, + "id": "minecraft:sticky_piston", + "unlocalizedName": "tile.pistonStickyBase", + "states": { + "facing": { + "dataMask": 7, + "values": { + "up": { "data": 1, "direction": [0, 1, 0] }, + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 30, + "id": "minecraft:web", + "unlocalizedName": "tile.web", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 4.0, + "resistance": 20.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 1, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": false, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 31, + "id": "minecraft:tallgrass", + "unlocalizedName": "tile.tallgrass", + "states": { + "variant": { + "values": { + "shrub": { "data": 0 }, + "grass": { "data": 1 }, + "fern": { "data": 2 }, + "biome_grass": { "data": 3 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 32, + "id": "minecraft:deadbush", + "unlocalizedName": "tile.deadbush", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 33, + "id": "minecraft:piston", + "unlocalizedName": "tile.pistonBase", + "states": { + "facing": { + "dataMask": 7, + "values": { + "up": { "data": 1, "direction": [0, 1, 0] }, + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 34, + "id": "minecraft:piston_head", + "unlocalizedName": "tile.null", + "states": { + "facing": { + "dataMask": 7, + "values": { + "up": { "data": 1, "direction": [0, 1, 0] }, + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 35, + "id": "minecraft:wool", + "unlocalizedName": "tile.cloth", + "states": { + "color": { + "values": { + "white": { "data": 0 }, + "orange": { "data": 1 }, + "magenta": { "data": 2 }, + "light_blue": { "data": 3 }, + "yellow": { "data": 4 }, + "lime": { "data": 5 }, + "pink": { "data": 6 }, + "gray": { "data": 7 }, + "light_gray": { "data": 8 }, + "cyan": { "data": 9 }, + "purple": { "data": 10 }, + "blue": { "data": 11 }, + "grown": { "data": 12 }, + "green": { "data": 13 }, + "red": { "data": 14 }, + "black": { "data": 15 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.8, + "resistance": 4.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 36, + "id": "minecraft:piston_extension", + "unlocalizedName": "tile.null", + "states": { + "facing": { + "dataMask": 7, + "values": { + "up": { "data": 1, "direction": [0, 1, 0] }, + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": -1.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 37, + "id": "minecraft:yellow_flower", + "unlocalizedName": "tile.flower1", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 38, + "id": "minecraft:red_flower", + "unlocalizedName": "tile.flower2", + "states": { + "variant": { + "values": { + "poppy": { "data": 0 }, + "blue_orchid": { "data": 1 }, + "allium": { "data": 2 }, + "azure_bluet": { "data": 3 }, + "red_tulip": { "data": 4 }, + "orange_tulip": { "data": 5 }, + "white_tulip": { "data": 6 }, + "pink_tulip": { "data": 7 }, + "oxyeye_daisy": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 39, + "id": "minecraft:brown_mushroom", + "unlocalizedName": "tile.mushroom", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 1, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 40, + "id": "minecraft:red_mushroom", + "unlocalizedName": "tile.mushroom", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 41, + "id": "minecraft:gold_block", + "unlocalizedName": "tile.blockGold", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 42, + "id": "minecraft:iron_block", + "unlocalizedName": "tile.blockIron", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 43, + "id": "minecraft:double_stone_slab", + "unlocalizedName": "tile.stoneSlab", + "states": { + "variant": { + "values": { + "stone": { "data": 0 }, + "sandstone": { "data": 1 }, + "wood": { "data": 2 }, + "cobble": { "data": 3 }, + "brick": { "data": 4 }, + "stoneBrick": { "data": 5 }, + "netherBrick": { "data": 6 }, + "quartz": { "data": 7 }, + "smoothStoneBrick": { "data": 8 }, + "smoothSandstone": { "data": 9 }, + "tileQuartz": { "data": 10 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 44, + "id": "minecraft:stone_slab", + "unlocalizedName": "tile.stoneSlab", + "states": { + "variant": { + "dataMask": 12, + "values": { + "stone": { "data": 0 }, + "sandstone": { "data": 1 }, + "wood": { "data": 2 }, + "cobble": { "data": 3 }, + "brick": { "data": 4 }, + "stoneBrick": { "data": 5 }, + "netherBrick": { "data": 6 }, + "quartz": { "data": 7 } + } + }, + "half": { + "dataMask": 8, + "values": { + "top": { "data": 0, "direction": [0, 1, 0] }, + "bottom": { "data": 8, "direction": [0, -1, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 45, + "id": "minecraft:brick_block", + "unlocalizedName": "tile.brick", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 46, + "id": "minecraft:tnt", + "unlocalizedName": "tile.tnt", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 47, + "id": "minecraft:bookshelf", + "unlocalizedName": "tile.bookshelf", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.5, + "resistance": 7.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 48, + "id": "minecraft:mossy_cobblestone", + "unlocalizedName": "tile.stoneMoss", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 49, + "id": "minecraft:obsidian", + "unlocalizedName": "tile.obsidian", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 50.0, + "resistance": 6000.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 50, + "id": "minecraft:torch", + "unlocalizedName": "tile.torch", + "states": { + "facing": { + "values": { + "east": { "data": 1, "direction": [1, 0, 0] }, + "west": { "data": 2, "direction": [-1, 0, 0] }, + "north": { "data": 3, "direction": [0, 0, -1] }, + "south": { "data": 4, "direction": [0, 0, 1] }, + "up": { "data": 5, "direction": [0, 1, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 14, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 51, + "id": "minecraft:fire", + "unlocalizedName": "tile.fire", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 15, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 52, + "id": "minecraft:mob_spawner", + "unlocalizedName": "tile.mobSpawner", + "material": { + "renderedAsNormalBlock": true, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 25.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 53, + "id": "minecraft:oak_stairs", + "unlocalizedName": "tile.stairsWood", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 54, + "id": "minecraft:chest", + "unlocalizedName": "tile.chest", + "states": { + "facing": { + "dataMask": 7, + "values": { + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.5, + "resistance": 12.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 55, + "id": "minecraft:redstone_wire", + "unlocalizedName": "tile.redstoneDust", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 56, + "id": "minecraft:diamond_ore", + "unlocalizedName": "tile.oreDiamond", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 57, + "id": "minecraft:diamond_block", + "unlocalizedName": "tile.blockDiamond", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 58, + "id": "minecraft:crafting_table", + "unlocalizedName": "tile.workbench", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.5, + "resistance": 12.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 59, + "id": "minecraft:wheat", + "unlocalizedName": "tile.crops", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 60, + "id": "minecraft:farmland", + "unlocalizedName": "tile.farmland", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.6, + "resistance": 3.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 61, + "id": "minecraft:furnace", + "unlocalizedName": "tile.furnace", + "states": { + "facing": { + "dataMask": 7, + "values": { + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.5, + "resistance": 17.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 62, + "id": "minecraft:lit_furnace", + "unlocalizedName": "tile.furnace", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.5, + "resistance": 17.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 13, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 63, + "id": "minecraft:standing_sign", + "unlocalizedName": "tile.sign", + "states": { + "facing": { + "values": { + "south": { "data": 0, "direction": [0, 0, 1] }, + "south_southwest": { "data": 1, "direction": [-0.3826, 0, 0.9238] }, + "southwest": { "data": 2, "direction": [-0.7071, 0, 0.7071] }, + "west_southwest": { "data": 3, "direction": [-0.9238, 0, 0.3826] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "west_northwest": { "data": 5, "direction": [-0.9238, 0, -0.3826] }, + "northwest": { "data": 6, "direction": [-0.7071, 0, -0.7071] }, + "north_northwest": { "data": 7, "direction": [-0.3826, 0, -0.9238] }, + "north": { "data": 8, "direction": [0, 0, -1] }, + "north_northeast": { "data": 9, "direction": [0.3826, 0, -0.9238] }, + "northeast": { "data": 10, "direction": [0.7071, 0, -0.7071] }, + "east_northeast": { "data": 11, "direction": [0.9238, 0, -0.3826] }, + "east": { "data": 12, "direction": [1, 0, 0] }, + "east_southeast": { "data": 13, "direction": [0.9238, 0, 0.3826] }, + "southeast": { "data": 14, "direction": [0.7071, 0, 0.7071] }, + "south_southeast": { "data": 15, "direction": [0.3826, 0, 0.9238] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.0, + "resistance": 5.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 64, + "id": "minecraft:wooden_door", + "unlocalizedName": "tile.doorWood", + "states": { + "half": { + "dataMask": 8, + "values": { + "bottom": { "data": 0 }, + "top": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 65, + "id": "minecraft:ladder", + "unlocalizedName": "tile.ladder", + "states": { + "facing": { + "dataMask": 7, + "values": { + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.4, + "resistance": 2.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 66, + "id": "minecraft:rail", + "unlocalizedName": "tile.rail", + "states": { + "facing": { + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "south": { "data": 1, "direction": [0, 0, 1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "east_ascending": { "data": 2, "direction": [1, 1, 0] }, + "east_descending": { "data": 2, "direction": [-1, -1, 0] }, + "west_ascending": { "data": 3, "direction": [-1, 1, 0] }, + "west_descending": { "data": 3, "direction": [1, -1, 0] }, + "north_ascending": { "data": 4, "direction": [0, 1, -1] }, + "north_descending": { "data": 4, "direction": [0, -1, 1] }, + "south_ascending": { "data": 5, "direction": [0, 1, 1] }, + "southeast": { "data": 6, "direction": [1, 0, 1] }, + "southwest": { "data": 7, "direction": [-1, 0, 1] }, + "northwest": { "data": 8, "direction": [-1, 0, -1] }, + "northeast": { "data": 9, "direction": [1, 0, -1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.7, + "resistance": 3.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 67, + "id": "minecraft:stone_stairs", + "unlocalizedName": "tile.stairsStone", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 68, + "id": "minecraft:wall_sign", + "unlocalizedName": "tile.sign", + "states": { + "facing": { + "dataMask": 7, + "values": { + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.0, + "resistance": 5.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 69, + "id": "minecraft:lever", + "unlocalizedName": "tile.lever", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 1, "direction": [1, 0, 0] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 2, "direction": [-1, 0, 0] }, + "north": { "data": 4, "direction": [0, 0, -1] } + } + }, + "powered": { + "dataMask": 8, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 70, + "id": "minecraft:stone_pressure_plate", + "unlocalizedName": "tile.pressurePlate", + "states": { + "powered": { + "dataMask": 1, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 71, + "id": "minecraft:iron_door", + "unlocalizedName": "tile.doorIron", + "states": { + "half": { + "dataMask": 8, + "values": { + "bottom": { "data": 0 }, + "top": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 25.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 72, + "id": "minecraft:wooden_pressure_plate", + "unlocalizedName": "tile.pressurePlate", + "states": { + "powered": { + "dataMask": 1, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 73, + "id": "minecraft:redstone_ore", + "unlocalizedName": "tile.oreRedstone", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 74, + "id": "minecraft:lit_redstone_ore", + "unlocalizedName": "tile.oreRedstone", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 9, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 75, + "id": "minecraft:unlit_redstone_torch", + "unlocalizedName": "tile.notGate", + "states": { + "facing": { + "values": { + "east": { "data": 1, "direction": [1, 0, 0] }, + "west": { "data": 2, "direction": [-1, 0, 0] }, + "north": { "data": 3, "direction": [0, 0, -1] }, + "south": { "data": 4, "direction": [0, 0, 1] }, + "up": { "data": 5, "direction": [0, 1, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 76, + "id": "minecraft:redstone_torch", + "unlocalizedName": "tile.notGate", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 7, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 77, + "id": "minecraft:stone_button", + "unlocalizedName": "tile.button", + "states": { + "facing": { + "dataMask": 7, + "values": { + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "south": { "data": 2, "direction": [0, 0, 1] }, + "west": { "data": 3, "direction": [-1, 0, 0] }, + "north": { "data": 4, "direction": [0, 0, -1] }, + "up": { "data": 5, "direction": [0, 1, 0] } + } + }, + "powered": { + "dataMask": 8, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 78, + "id": "minecraft:snow_layer", + "unlocalizedName": "tile.snow", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.1, + "resistance": 0.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 79, + "id": "minecraft:ice", + "unlocalizedName": "tile.ice", + "material": { + "renderedAsNormalBlock": true, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.98, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 3, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 80, + "id": "minecraft:snow", + "unlocalizedName": "tile.snow", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 81, + "id": "minecraft:cactus", + "unlocalizedName": "tile.cactus", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.4, + "resistance": 2.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 82, + "id": "minecraft:clay", + "unlocalizedName": "tile.clay", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.6, + "resistance": 3.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 83, + "id": "minecraft:reeds", + "unlocalizedName": "tile.reeds", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 84, + "id": "minecraft:jukebox", + "unlocalizedName": "tile.jukebox", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 85, + "id": "minecraft:fence", + "unlocalizedName": "tile.fence", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 86, + "id": "minecraft:pumpkin", + "unlocalizedName": "tile.pumpkin", + "states": { + "facing": { + "dataMask": 7, + "values": { + "south": { "data": 0, "direction": [0, 0, 1] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "east": { "data": 3, "direction": [1, 0, 0] }, + "none": { "data": 4 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.0, + "resistance": 5.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 87, + "id": "minecraft:netherrack", + "unlocalizedName": "tile.hellrock", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.4, + "resistance": 2.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 88, + "id": "minecraft:soul_sand", + "unlocalizedName": "tile.hellsand", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 89, + "id": "minecraft:glowstone", + "unlocalizedName": "tile.lightgem", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 15, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 90, + "id": "minecraft:portal", + "unlocalizedName": "tile.portal", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": -1.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 11, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 91, + "id": "minecraft:lit_pumpkin", + "unlocalizedName": "tile.litpumpkin", + "states": { + "facing": { + "dataMask": 7, + "values": { + "south": { "data": 0, "direction": [0, 0, 1] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "east": { "data": 3, "direction": [1, 0, 0] }, + "none": { "data": 4 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.0, + "resistance": 5.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 15, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 92, + "id": "minecraft:cake", + "unlocalizedName": "tile.cake", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 93, + "id": "minecraft:unpowered_repeater", + "unlocalizedName": "tile.diode", + "states": { + "facing": { + "dataMask": 3, + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "south": { "data": 2, "direction": [0, 0, 1] }, + "west": { "data": 3, "direction": [-1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 94, + "id": "minecraft:powered_repeater", + "unlocalizedName": "tile.diode", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 9, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 95, + "id": "minecraft:stained_glass", + "unlocalizedName": "tile.stainedGlass", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 96, + "id": "minecraft:trapdoor", + "unlocalizedName": "tile.trapdoor", + "states": { + "facing": { + "dataMask": 11, + "values": { + "south": { "data": 0, "direction": [0, 1, 1] }, + "north": { "data": 1, "direction": [0, 1, -1] }, + "east": { "data": 2, "direction": [1, 1, 0] }, + "west": { "data": 3, "direction": [-1, 1, 0] }, + "south_upper": { "data": 8, "direction": [0, -1, 1] }, + "north_upper": { "data": 9, "direction": [0, -1, -1] }, + "east_upper": { "data": 10, "direction": [1, -1, 0] }, + "west_upper": { "data": 11, "direction": [-1, -1, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 97, + "id": "minecraft:monster_egg", + "unlocalizedName": "tile.monsterStoneEgg", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.75, + "resistance": 3.75, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 98, + "id": "minecraft:stonebrick", + "unlocalizedName": "tile.stonebricksmooth", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.5, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 99, + "id": "minecraft:brown_mushroom_block", + "unlocalizedName": "tile.mushroom", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 100, + "id": "minecraft:red_mushroom_block", + "unlocalizedName": "tile.mushroom", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 101, + "id": "minecraft:iron_bars", + "unlocalizedName": "tile.fenceIron", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 102, + "id": "minecraft:glass_pane", + "unlocalizedName": "tile.thinGlass", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 103, + "id": "minecraft:melon_block", + "unlocalizedName": "tile.melon", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.0, + "resistance": 5.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 104, + "id": "minecraft:pumpkin_stem", + "unlocalizedName": "tile.pumpkinStem", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 105, + "id": "minecraft:melon_stem", + "unlocalizedName": "tile.pumpkinStem", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 106, + "id": "minecraft:vine", + "unlocalizedName": "tile.vine", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": true + } + }, + { + "legacyId": 107, + "id": "minecraft:fence_gate", + "unlocalizedName": "tile.fenceGate", + "states": { + "facing": { + "dataMask": 3, + "values": { + "south": { "data": 0, "direction": [0, 0, 1] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "east": { "data": 3, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 108, + "id": "minecraft:brick_stairs", + "unlocalizedName": "tile.stairsBrick", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 109, + "id": "minecraft:stone_brick_stairs", + "unlocalizedName": "tile.stairsStoneBrickSmooth", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.5, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 110, + "id": "minecraft:mycelium", + "unlocalizedName": "tile.mycel", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.6, + "resistance": 3.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 111, + "id": "minecraft:waterlily", + "unlocalizedName": "tile.waterlily", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 112, + "id": "minecraft:nether_brick", + "unlocalizedName": "tile.netherBrick", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 113, + "id": "minecraft:nether_brick_fence", + "unlocalizedName": "tile.netherFence", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 114, + "id": "minecraft:nether_brick_stairs", + "unlocalizedName": "tile.stairsNetherBrick", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 115, + "id": "minecraft:nether_wart", + "unlocalizedName": "tile.netherStalk", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 116, + "id": "minecraft:enchanting_table", + "unlocalizedName": "tile.enchantmentTable", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 6000.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 117, + "id": "minecraft:brewing_stand", + "unlocalizedName": "tile.brewingStand", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 1, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 118, + "id": "minecraft:cauldron", + "unlocalizedName": "tile.cauldron", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 10.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 119, + "id": "minecraft:end_portal", + "unlocalizedName": "tile.null", + "states": { + "facing": { + "dataMask": 3, + "values": { + "south": { "data": 0, "direction": [0, 0, 1] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "east": { "data": 3, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": -1.0, + "resistance": 1.8E7, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 15, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 120, + "id": "minecraft:end_portal_frame", + "unlocalizedName": "tile.endPortalFrame", + "material": { + "renderedAsNormalBlock": true, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": -1.0, + "resistance": 1.8E7, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 0, + "lightValue": 1, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 121, + "id": "minecraft:end_stone", + "unlocalizedName": "tile.whiteStone", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 45.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 122, + "id": "minecraft:dragon_egg", + "unlocalizedName": "tile.dragonEgg", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 45.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 1, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 123, + "id": "minecraft:redstone_lamp", + "unlocalizedName": "tile.redstoneLight", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 124, + "id": "minecraft:lit_redstone_lamp", + "unlocalizedName": "tile.redstoneLight", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 15, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 125, + "id": "minecraft:double_wooden_slab", + "unlocalizedName": "tile.woodSlab", + "states": { + "variant": { + "dataMask": 12, + "values": { + "oak": { "data": 0 }, + "spruce": { "data": 1 }, + "birch": { "data": 2 }, + "jungle": { "data": 3 }, + "acacia": { "data": 4 }, + "darkoak": { "data": 5 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 126, + "id": "minecraft:wooden_slab", + "unlocalizedName": "tile.woodSlab", + "states": { + "variant": { + "dataMask": 12, + "values": { + "oak": { "data": 0 }, + "spruce": { "data": 1 }, + "birch": { "data": 2 }, + "jungle": { "data": 3 }, + "acacia": { "data": 4 }, + "darkoak": { "data": 5 } + } + }, + "half": { + "dataMask": 8, + "values": { + "top": { "data": 0, "direction": [0, 1, 0] }, + "bottom": { "data": 8, "direction": [0, -1, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 127, + "id": "minecraft:cocoa", + "unlocalizedName": "tile.cocoa", + "states": { + "facing": { + "dataMask": 3, + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "south": { "data": 2, "direction": [0, 0, 1] }, + "west": { "data": 3, "direction": [-1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.2, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 128, + "id": "minecraft:sandstone_stairs", + "unlocalizedName": "tile.stairsSandStone", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.8, + "resistance": 4.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 129, + "id": "minecraft:emerald_ore", + "unlocalizedName": "tile.oreEmerald", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 130, + "id": "minecraft:ender_chest", + "unlocalizedName": "tile.enderChest", + "states": { + "facing": { + "dataMask": 7, + "values": { + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 22.5, + "resistance": 3000.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 7, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 131, + "id": "minecraft:tripwire_hook", + "unlocalizedName": "tile.tripWireSource", + "states": { + "facing": { + "dataMask": 3, + "values": { + "south": { "data": 0, "direction": [0, 0, 1] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "east": { "data": 3, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 132, + "id": "minecraft:tripwire", + "unlocalizedName": "tile.tripWire", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 133, + "id": "minecraft:emerald_block", + "unlocalizedName": "tile.blockEmerald", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 134, + "id": "minecraft:spruce_stairs", + "unlocalizedName": "tile.stairsWoodSpruce", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 135, + "id": "minecraft:birch_stairs", + "unlocalizedName": "tile.stairsWoodBirch", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 136, + "id": "minecraft:jungle_stairs", + "unlocalizedName": "tile.stairsWoodJungle", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 137, + "id": "minecraft:command_block", + "unlocalizedName": "tile.commandBlock", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": -1.0, + "resistance": 1.8E7, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 138, + "id": "minecraft:beacon", + "unlocalizedName": "tile.beacon", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 15, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 139, + "id": "minecraft:cobblestone_wall", + "unlocalizedName": "tile.cobbleWall", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 140, + "id": "minecraft:flower_pot", + "unlocalizedName": "tile.flowerPot", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 141, + "id": "minecraft:carrots", + "unlocalizedName": "tile.carrots", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 142, + "id": "minecraft:potatoes", + "unlocalizedName": "tile.potatoes", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 143, + "id": "minecraft:wooden_button", + "unlocalizedName": "tile.button", + "states": { + "facing": { + "dataMask": 7, + "values": { + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "south": { "data": 2, "direction": [0, 0, 1] }, + "west": { "data": 3, "direction": [-1, 0, 0] }, + "north": { "data": 4, "direction": [0, 0, -1] }, + "up": { "data": 5, "direction": [0, 1, 0] } + } + }, + "powered": { + "dataMask": 8, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 144, + "id": "minecraft:skull", + "unlocalizedName": "tile.skull", + "states": { + "facing": { + "dataMask": 7, + "values": { + "down": { "data": 1, "direction": [0, -1, 0] }, + "up": { "data": 1, "direction": [0, 1, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "east": { "data": 4, "direction": [1, 0, 0] }, + "west": { "data": 5, "direction": [-1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 1.0, + "resistance": 5.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 145, + "id": "minecraft:anvil", + "unlocalizedName": "tile.anvil", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 6000.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": true, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 146, + "id": "minecraft:trapped_chest", + "unlocalizedName": "tile.chestTrap", + "states": { + "facing": { + "dataMask": 7, + "values": { + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 2.5, + "resistance": 12.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 147, + "id": "minecraft:light_weighted_pressure_plate", + "unlocalizedName": "tile.weightedPlate_light", + "states": { + "powered": { + "dataMask": 1, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 148, + "id": "minecraft:heavy_weighted_pressure_plate", + "unlocalizedName": "tile.weightedPlate_heavy", + "states": { + "powered": { + "dataMask": 1, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 1 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 149, + "id": "minecraft:unpowered_comparator", + "unlocalizedName": "tile.comparator", + "states": { + "facing": { + "dataMask": 3, + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "south": { "data": 2, "direction": [0, 0, 1] }, + "west": { "data": 3, "direction": [-1, 0, 0] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 150, + "id": "minecraft:powered_comparator", + "unlocalizedName": "tile.comparator", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": true, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 9, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 151, + "id": "minecraft:daylight_detector", + "unlocalizedName": "tile.daylightDetector", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 152, + "id": "minecraft:redstone_block", + "unlocalizedName": "tile.blockRedstone", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": true, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 153, + "id": "minecraft:quartz_ore", + "unlocalizedName": "tile.netherquartz", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 154, + "id": "minecraft:hopper", + "unlocalizedName": "tile.hopper", + "states": { + "facing": { + "dataMask": 7, + "values": { + "down": { "data": 0, "direction": [0, -1, 0] }, + "up": { "data": 1, "direction": [0, 1, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + }, + "powered": { + "dataMask": 8, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.0, + "resistance": 24.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 155, + "id": "minecraft:quartz_block", + "unlocalizedName": "tile.quartzBlock", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.8, + "resistance": 4.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 156, + "id": "minecraft:quartz_stairs", + "unlocalizedName": "tile.stairsQuartz", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.8, + "resistance": 4.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 157, + "id": "minecraft:activator_rail", + "unlocalizedName": "tile.activatorRail", + "states": { + "facing": { + "values": { + "north": { "data": 0, "direction": [0, 0, -1] }, + "south": { "data": 1, "direction": [0, 0, 1] }, + "east": { "data": 1, "direction": [1, 0, 0] }, + "west": { "data": 1, "direction": [-1, 0, 0] }, + "east_ascending": { "data": 2, "direction": [1, 1, 0] }, + "east_descending": { "data": 2, "direction": [-1, -1, 0] }, + "west_ascending": { "data": 3, "direction": [-1, 1, 0] }, + "west_descending": { "data": 3, "direction": [1, -1, 0] }, + "north_ascending": { "data": 4, "direction": [0, 1, -1] }, + "north_descending": { "data": 4, "direction": [0, -1, 1] }, + "south_ascending": { "data": 5, "direction": [0, 1, 1] }, + "southeast": { "data": 6, "direction": [1, 0, 1] }, + "southwest": { "data": 7, "direction": [-1, 0, 1] }, + "northwest": { "data": 8, "direction": [-1, 0, -1] }, + "northeast": { "data": 9, "direction": [1, 0, -1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.7, + "resistance": 3.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 158, + "id": "minecraft:dropper", + "unlocalizedName": "tile.dropper", + "states": { + "facing": { + "dataMask": 7, + "values": { + "down": { "data": 0, "direction": [0, -1, 0] }, + "up": { "data": 1, "direction": [0, 1, 0] }, + "north": { "data": 2, "direction": [0, 0, -1] }, + "south": { "data": 3, "direction": [0, 0, 1] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "east": { "data": 5, "direction": [1, 0, 0] } + } + }, + "powered": { + "dataMask": 8, + "values": { + "unpowered": { "data": 0 }, + "powered": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 3.5, + "resistance": 17.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 159, + "id": "minecraft:stained_hardened_clay", + "unlocalizedName": "tile.clayHardenedStained", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.25, + "resistance": 21.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 160, + "id": "minecraft:stained_glass_pane", + "unlocalizedName": "tile.thinStainedGlass", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.3, + "resistance": 1.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 161, + "id": "minecraft:leaves2", + "unlocalizedName": "tile.leaves", + "states": { + "variant": { + "dataMask": 3, + "values": { + "acacia": { "data": 0 }, + "darkoak": { "data": 1 } + } + }, + "decay": { + "dataMask": 7, + "values": { + "no_decay": { "data": 4 }, + "decay": { "data": 0 } + } + }, + "check_decay": { + "dataMask": 12, + "values": { + "no_decay": { "data": 12 }, + "decay": { "data": 0 } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.2, + "resistance": 1.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 1, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": true, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 162, + "id": "minecraft:log2", + "unlocalizedName": "tile.log", + "states": { + "variant": { + "dataMask": 3, + "values": { + "acacia": { "data": 0 }, + "darkoak": { "data": 1 } + } + }, + "facing": { + "dataMask": 12, + "values": { + "up": { "data": 0, "direction": [0, 1, 0] }, + "down": { "data": 0, "direction": [0, -1, 0] }, + "east": { "data": 4, "direction": [1, 0, 0] }, + "west": { "data": 4, "direction": [-1, 0, 0] }, + "north": { "data": 8, "direction": [0, 0, -1] }, + "south": { "data": 8, "direction": [0, 0, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 10.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 163, + "id": "minecraft:acacia_stairs", + "unlocalizedName": "tile.stairsWoodAcacia", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 164, + "id": "minecraft:dark_oak_stairs", + "unlocalizedName": "tile.stairsWoodDarkOak", + "states": { + "facing": { + "dataMask": 7, + "values": { + "east": { "data": 4, "direction": [1, 1, 0] }, + "west": { "data": 5, "direction": [-1, 1, 0] }, + "north": { "data": 7, "direction": [0, 1, -1] }, + "south": { "data": 6, "direction": [0, 1, 1] }, + "east_upsidedown": { "data": 0, "direction": [1, -1, 0] }, + "west_upsidedown": { "data": 1, "direction": [-1, -1, 0] }, + "north_upsidedown": { "data": 3, "direction": [0, -1, -1] }, + "south_upsidedown": { "data": 2, "direction": [0, -1, 1] } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 2.0, + "resistance": 15.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": true, + "movementBlocker": true, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 170, + "id": "minecraft:hay_block", + "unlocalizedName": "tile.hayBlock", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 171, + "id": "minecraft:carpet", + "unlocalizedName": "tile.woolCarpet", + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.1, + "resistance": 0.5, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": true, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 172, + "id": "minecraft:hardened_clay", + "unlocalizedName": "tile.clayHardened", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 1.25, + "resistance": 21.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 173, + "id": "minecraft:coal_block", + "unlocalizedName": "tile.blockCoal", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 5.0, + "resistance": 30.0, + "slipperiness": 0.6, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": false, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": true, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 174, + "id": "minecraft:packed_ice", + "unlocalizedName": "tile.icePacked", + "material": { + "renderedAsNormalBlock": true, + "fullCube": true, + "opaque": true, + "powerSource": false, + "liquid": false, + "solid": true, + "hardness": 0.5, + "resistance": 2.5, + "slipperiness": 0.98, + "grassBlocking": false, + "ambientOcclusionLightValue": 0.2, + "lightOpacity": 255, + "lightValue": 0, + "fragileWhenPushed": false, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": false, + "usingNeighborLight": false, + "movementBlocker": true, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + }, + { + "legacyId": 175, + "id": "minecraft:double_plant", + "unlocalizedName": "tile.doublePlant", + "states": { + "variant": { + "dataMask": 7, + "values": { + "sunflower": { "data": 0 }, + "lilac": { "data": 1 }, + "double_tallgrass": { "data": 2 }, + "large_fern": { "data": 3 }, + "rose_bush": { "data": 4 }, + "peony": { "data": 5 } + } + }, + "half": { + "dataMask": 8, + "values": { + "top": { "data": 0 }, + "bottom": { "data": 8 } + } + } + }, + "material": { + "renderedAsNormalBlock": false, + "fullCube": false, + "opaque": false, + "powerSource": false, + "liquid": false, + "solid": false, + "hardness": 0.0, + "resistance": 0.0, + "slipperiness": 0.6, + "grassBlocking": true, + "ambientOcclusionLightValue": 1.0, + "lightOpacity": 0, + "lightValue": 0, + "fragileWhenPushed": true, + "unpushable": false, + "adventureModeExempt": true, + "ticksRandomly": true, + "usingNeighborLight": true, + "movementBlocker": false, + "burnable": false, + "toolRequired": false, + "replacedDuringPlacement": false + } + } +] \ No newline at end of file