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