@@ -0,0 +1 @@ | |||
* Stained bricks. Requires new blending mode. |
@@ -31,6 +31,9 @@ import net.minecraft.util.NonNullList; | |||
import net.minecraft.util.math.BlockPos; | |||
import net.minecraft.world.World; | |||
import javax.annotation.Nullable; | |||
import java.util.*; | |||
public class CommandUCWDebug extends CommandBase { | |||
@Override | |||
public String getName() { | |||
@@ -42,12 +45,30 @@ public class CommandUCWDebug extends CommandBase { | |||
return "no, don't"; | |||
} | |||
@Override | |||
public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) { | |||
if (args.length == 1) { | |||
Set<String> domains = new HashSet<>(); | |||
for (UCWBlockRule rule : UnlimitedChiselWorks.BLOCK_RULES) { | |||
domains.add(rule.fromBlock.getRegistryName().getResourceDomain()); | |||
} | |||
return getListOfStringsMatchingLastWord(args, domains.toArray(new String[domains.size()])); | |||
} else { | |||
return Collections.emptyList(); | |||
} | |||
} | |||
@Override | |||
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { | |||
if (sender instanceof EntityPlayerMP) { | |||
World world = sender.getEntityWorld(); | |||
BlockPos pos = sender.getPosition(); | |||
for (UCWBlockRule rule : UnlimitedChiselWorks.BLOCK_RULES) { | |||
if (args.length >= 1 && !rule.fromBlock.getRegistryName().toString().toLowerCase().startsWith(args[0].toLowerCase())) { | |||
continue; | |||
} | |||
for (UCWObjectFactory factory : rule.objectFactories.valueCollection()) { | |||
BlockPos.MutableBlockPos posCopy = new BlockPos.MutableBlockPos(pos); | |||
NonNullList<ItemStack> stackList = NonNullList.create(); |
@@ -38,6 +38,12 @@ import java.lang.reflect.Method; | |||
import java.util.*; | |||
public class UCWBlockRule { | |||
public enum BlendMode { | |||
NONE, | |||
BLEND, | |||
PLANK | |||
} | |||
protected final List<IBlockState> from, overlay; | |||
protected final List<IBlockState> through; | |||
protected final List<IBlockState> basedUpon; | |||
@@ -45,7 +51,7 @@ public class UCWBlockRule { | |||
protected final TIntObjectMap<UCWObjectFactory> objectFactories = new TIntObjectHashMap<>(); | |||
protected final String prefix; | |||
protected final String group; | |||
protected final boolean blend; | |||
protected final BlendMode mode; | |||
protected final int fromCount; | |||
public UCWBlockRule(JsonObject object) throws Exception { | |||
@@ -64,7 +70,7 @@ public class UCWBlockRule { | |||
overlayBlock = fromBlock; | |||
} | |||
blend = object.has("blend") && object.get("blend").getAsBoolean(); | |||
mode = object.has("mode") ? BlendMode.valueOf(object.get("mode").getAsString().toUpperCase()) : BlendMode.NONE; | |||
int fc = 0; | |||
for (IBlockState state : from) { | |||
@@ -80,7 +86,7 @@ public class UCWBlockRule { | |||
for (int i = 0; i < from.size(); i++) { | |||
if (from.get(i) != null) { | |||
IBlockState state = from.get(i); | |||
String s = prefix + i; | |||
String s = prefix + state.getBlock().getMetaFromState(state); | |||
objectFactories.put(i, new UCWObjectFactory(this, state, new ResourceLocation(UnlimitedChiselWorks.MODID, s))); | |||
} |
@@ -72,7 +72,7 @@ public class UCWFakeResourcePack implements IResourcePack, IResourceManagerReloa | |||
String s = element.getAsString(); | |||
if (s != null && s.startsWith(str[1] + ":")) { | |||
String ns = "ucw_generated:ucw_ucw_" + str[0] + "/" + s.replaceFirst(":", "/"); | |||
System.out.println(s + " -> " + ns); | |||
// System.out.println(s + " -> " + ns); | |||
return new JsonPrimitive(ns); | |||
} else { | |||
return element; |
@@ -58,7 +58,7 @@ public final class UCWMagic { | |||
} | |||
} | |||
System.out.println(state); | |||
// System.out.println(state); | |||
return model.getTextures().iterator().next(); | |||
} | |||
@@ -160,7 +160,7 @@ public final class UCWMagic { | |||
return contrast; | |||
} | |||
public static int[] transform(TextureAtlasSprite sprite, int frame, TextureAtlasSprite from, TextureAtlasSprite overlay, TextureAtlasSprite basedUpon, boolean blend) { | |||
public static int[] transform(TextureAtlasSprite sprite, int frame, TextureAtlasSprite from, TextureAtlasSprite overlay, TextureAtlasSprite basedUpon, UCWBlockRule.BlendMode mode) { | |||
int[] texture = sprite.getFrameTextureData(frame)[0]; | |||
int width = sprite.getIconWidth(); | |||
int height = sprite.getIconHeight(); | |||
@@ -179,6 +179,33 @@ public final class UCWMagic { | |||
avgHueFrom = Math.atan2(avgHueFromS, avgHueFromC) / 2.0f / Math.PI; | |||
avgSatFrom /= from.getIconWidth() * from.getIconHeight(); | |||
double[] hueRange = new double[4]; | |||
double[] satRange = new double[2]; | |||
int[] srdiv = new int[2]; | |||
if (mode == UCWBlockRule.BlendMode.PLANK) { | |||
for (int i : from.getFrameTextureData(0)[0]) { | |||
float[] hd = toHSL(i); | |||
double normV = (double) (hd[2] - contrastFrom[0]) / contrastFrom[1]; | |||
hueRange[0] += Math.sin(hd[0] * 2 * Math.PI) * (1 - normV); | |||
hueRange[1] += Math.sin(hd[0] * 2 * Math.PI) * normV; | |||
hueRange[2] += Math.cos(hd[0] * 2 * Math.PI) * (1 - normV); | |||
hueRange[3] += Math.cos(hd[0] * 2 * Math.PI) * normV; | |||
if (normV < 0.5) { | |||
satRange[0] += hd[1]; | |||
srdiv[0]++; | |||
} else { | |||
satRange[1] += hd[1]; | |||
srdiv[1]++; | |||
} | |||
} | |||
hueRange[0] = Math.atan2(hueRange[0], hueRange[2]) / 2.0f / Math.PI; | |||
hueRange[1] = Math.atan2(hueRange[1], hueRange[3]) / 2.0f / Math.PI; | |||
satRange[0] /= srdiv[0]; | |||
satRange[1] /= srdiv[1]; | |||
} | |||
int[] texData = new int[texture.length]; | |||
for (int iy = 0; iy < height; iy++) { | |||
for (int ix = 0; ix < width; ix++) { | |||
@@ -188,12 +215,22 @@ public final class UCWMagic { | |||
float[] hsbTex = toHSL(it); | |||
float[] hsbBu = toHSL(ibu); | |||
if (blend || (hsbBu[2] < 0.1 && hsbBu[1] < 0.1 && avgSatFrom >= 0.3)) { | |||
double normV = (double) (hsbTex[2] - contrastBasedUpon[0]) / contrastBasedUpon[1]; | |||
float v = (float) ((normV * contrastFrom[1]) + contrastFrom[0]); | |||
if (mode == UCWBlockRule.BlendMode.BLEND || (hsbBu[2] < 0.1 && hsbBu[1] < 0.1 && avgSatFrom >= 0.3)) { | |||
hsbBu[0] = (float) avgHueFrom; | |||
hsbBu[1] = (float) avgSatFrom; | |||
} else if (mode == UCWBlockRule.BlendMode.PLANK) { | |||
double nv2 = normV; | |||
if (nv2 < 0) nv2 = 0; | |||
if (nv2 > 1) nv2 = 1; | |||
hsbBu[0] = (float) (Math.atan2( | |||
(Math.sin(hueRange[1] * 2 * Math.PI) * nv2) + (Math.sin(hueRange[0] * 2 * Math.PI) * (1 - nv2)), | |||
(Math.cos(hueRange[1] * 2 * Math.PI) * nv2) + (Math.cos(hueRange[0] * 2 * Math.PI) * (1 - nv2)) | |||
) / 2.0f / Math.PI); | |||
hsbBu[1] = (float) ((satRange[1] * nv2) + (satRange[0] * (1 - nv2))); | |||
} | |||
double normV = (double) (hsbTex[2] - contrastBasedUpon[0]) / contrastBasedUpon[1]; | |||
float v = (float) ((normV * contrastFrom[1]) + contrastFrom[0]); | |||
if (v < 0) v = 0; | |||
if (v > 1) v = 1; |
@@ -180,11 +180,16 @@ public class UCWObjectFactory { | |||
@Override | |||
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) { | |||
Item fromItem = getItemThrough(); | |||
Item origItem = getItemThrough(); | |||
NonNullList<ItemStack> proxyList = NonNullList.create(); | |||
fromItem.getSubItems(tab, proxyList); | |||
origItem.getSubItems(tab, proxyList); | |||
for (ItemStack stack : proxyList) { | |||
if (stack.getItem() == fromItem) { | |||
if (stack.getItem() == origItem) { | |||
// FIXME: Dirt#9 doesn't really work well :-( | |||
if (rule.throughBlock.getRegistryName().toString().equals("chisel:dirt") && stack.getItemDamage() == 9) { | |||
continue; | |||
} | |||
items.add(UCWMagic.copyChangeItem(stack, this)); | |||
} | |||
} |
@@ -134,7 +134,7 @@ public class UCWProxyClient extends UCWProxyCommon { | |||
clearFramesTextureData(); | |||
for (int i = 0; i < locationTex.getFrameCount(); i++) { | |||
int[][] pixels = new int[Minecraft.getMinecraft().gameSettings.mipmapLevels + 1][]; | |||
pixels[0] = UCWMagic.transform(locationTex, i, fromTex, overlayTex, basedUponTex, rule.blend); | |||
pixels[0] = UCWMagic.transform(locationTex, i, fromTex, overlayTex, basedUponTex, rule.mode); | |||
framesTextureData.add(pixels); | |||
} | |||
@@ -24,6 +24,8 @@ import com.google.gson.Gson; | |||
import com.google.gson.JsonArray; | |||
import com.google.gson.JsonElement; | |||
import com.google.gson.JsonObject; | |||
import gnu.trove.map.TObjectIntMap; | |||
import gnu.trove.map.hash.TObjectIntHashMap; | |||
import net.minecraft.block.Block; | |||
import net.minecraft.block.state.IBlockState; | |||
import net.minecraft.creativetab.CreativeTabs; | |||
@@ -32,6 +34,9 @@ import net.minecraft.item.ItemStack; | |||
import net.minecraft.util.JsonUtils; | |||
import net.minecraft.util.NonNullList; | |||
import net.minecraftforge.common.MinecraftForge; | |||
import net.minecraftforge.common.config.ConfigCategory; | |||
import net.minecraftforge.common.config.Configuration; | |||
import net.minecraftforge.common.config.Property; | |||
import net.minecraftforge.event.RegistryEvent; | |||
import net.minecraftforge.fml.common.Loader; | |||
import net.minecraftforge.fml.common.Mod; | |||
@@ -58,9 +63,14 @@ public class UnlimitedChiselWorks { | |||
public static final String MODID = "unlimitedchiselworks"; | |||
public static final String VERSION = "${version}"; | |||
public static final Set<UCWBlockRule> BLOCK_RULES = new LinkedHashSet<>(); | |||
public static final TObjectIntMap<Block> RULE_COMBINATIONS = new TObjectIntHashMap<>(); | |||
public static final Set<UCWGroupRule> GROUP_RULES = new LinkedHashSet<>(); | |||
protected static final Gson GSON = new Gson(); | |||
private static Logger LOGGER; | |||
private static Configuration CONFIG; | |||
private static ConfigCategory C_ENABLED; | |||
private boolean enableDebugFeatures; | |||
@SidedProxy(clientSide = "pl.asie.ucw.UCWProxyClient", serverSide = "pl.asie.ucw.UCWProxyCommon") | |||
private static UCWProxyCommon proxy; | |||
@@ -85,10 +95,18 @@ public class UnlimitedChiselWorks { | |||
try { | |||
UCWBlockRule rule = new UCWBlockRule(element.getAsJsonObject()); | |||
if (rule.isValid()) { | |||
if (BLOCK_RULES.contains(rule)) { | |||
LOGGER.warn("Duplicate rule found! " + rule); | |||
} else { | |||
BLOCK_RULES.add(rule); | |||
String fbName = rule.fromBlock.getRegistryName().toString(); | |||
if (!C_ENABLED.containsKey(fbName)) { | |||
Property prop = new Property(fbName, "true", Property.Type.BOOLEAN); | |||
C_ENABLED.put(fbName, prop); | |||
} | |||
if (C_ENABLED.get(fbName).getBoolean()) { | |||
if (BLOCK_RULES.contains(rule)) { | |||
LOGGER.warn("Duplicate rule found! " + rule); | |||
} else { | |||
BLOCK_RULES.add(rule); | |||
} | |||
} | |||
} | |||
} catch (Exception e) { | |||
@@ -148,15 +166,24 @@ public class UnlimitedChiselWorks { | |||
@EventHandler | |||
public void preInit(FMLPreInitializationEvent event) { | |||
LOGGER = LogManager.getLogger(MODID); | |||
CONFIG = new Configuration(event.getSuggestedConfigurationFile()); | |||
MinecraftForge.EVENT_BUS.register(this); | |||
MinecraftForge.EVENT_BUS.register(proxy); | |||
proxy.preInit(); | |||
C_ENABLED = CONFIG.getCategory("enabled"); | |||
enableDebugFeatures = CONFIG.getBoolean("enableDebugFeatures", "general", false, "Whether or not to enable debug functionality."); | |||
} | |||
@SubscribeEvent(priority = EventPriority.LOW) | |||
public void registerBlocks(RegistryEvent.Register<Block> event) { | |||
findRules(); | |||
if (CONFIG.hasChanged()) { | |||
CONFIG.save(); | |||
} | |||
for (UCWBlockRule rule : BLOCK_RULES) { | |||
rule.registerBlocks(event.getRegistry()); | |||
} | |||
@@ -171,12 +198,16 @@ public class UnlimitedChiselWorks { | |||
@EventHandler | |||
public void init(FMLInitializationEvent event) { | |||
for (UCWBlockRule rule : BLOCK_RULES) { | |||
RULE_COMBINATIONS.adjustOrPutValue(rule.fromBlock, rule.fromCount, rule.fromCount); | |||
} | |||
for (UCWBlockRule rule : BLOCK_RULES) { | |||
for (int i = 0; i < rule.from.size(); i++) { | |||
IBlockState fromState = rule.from.get(i); | |||
if (fromState == null) continue; | |||
String groupName = rule.fromCount == 1 ? rule.group : rule.group + "_" + i; | |||
String groupName = RULE_COMBINATIONS.get(rule.fromBlock) == 1 ? rule.group : rule.group + "_" + fromState.getBlock().getMetaFromState(fromState); | |||
UCWCompatUtils.addChiselVariation(groupName, new ItemStack(fromState.getBlock(), 1, fromState.getBlock().damageDropped(fromState))); | |||
UCWObjectFactory factory = rule.objectFactories.get(i); | |||
@@ -195,6 +226,10 @@ public class UnlimitedChiselWorks { | |||
UCWCompatUtils.addChiselVariation(rule.groupName, new ItemStack(state.getBlock(), 1, state.getBlock().damageDropped(state))); | |||
} | |||
} | |||
if (CONFIG.hasChanged()) { | |||
CONFIG.save(); | |||
} | |||
} | |||
@EventHandler | |||
@@ -214,6 +249,8 @@ public class UnlimitedChiselWorks { | |||
@EventHandler | |||
public void onServerStarting(FMLServerStartingEvent event) { | |||
event.registerServerCommand(new CommandUCWDebug()); | |||
if (enableDebugFeatures) { | |||
event.registerServerCommand(new CommandUCWDebug()); | |||
} | |||
} | |||
} |
@@ -0,0 +1,97 @@ | |||
{ | |||
"blocks": [ | |||
{ | |||
"from": { | |||
"state": "betterwithaddons:whitebrick#variant=default" | |||
}, | |||
"overlay": { | |||
"state": "betterwithmods:aesthetic#blocktype=whitestone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "betterwithaddons:whitebrick#variant=default" | |||
}, | |||
"overlay": { | |||
"state": "betterwithmods:aesthetic#blocktype=whitestone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "betterwithaddons:whitebrick#variant=default" | |||
}, | |||
"overlay": { | |||
"state": "betterwithmods:aesthetic#blocktype=whitestone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"block": "betterwithmods:aesthetic#blocktype=whitecobble" | |||
}, | |||
"through": { | |||
"block": "chisel:cobblestone", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:cobblestone" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"block": "betterwithmods:aesthetic#blocktype=whitecobble" | |||
}, | |||
"through": { | |||
"block": "chisel:cobblestone1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:cobblestone" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"block": "betterwithmods:aesthetic#blocktype=whitecobble" | |||
}, | |||
"through": { | |||
"block": "chisel:cobblestone2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:cobblestone" | |||
} | |||
} | |||
] | |||
} |
@@ -246,6 +246,180 @@ | |||
"based_upon": { | |||
"state": "minecraft:quartz_block#variant=default" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": [ | |||
"botania:biomestoneb#variant=forest", | |||
"botania:biomestoneb#variant=plains", | |||
"botania:biomestoneb#variant=mountain", | |||
"botania:biomestoneb#variant=fungal", | |||
"botania:biomestoneb#variant=swamp", | |||
"botania:biomestoneb#variant=desert", | |||
"botania:biomestoneb#variant=taiga", | |||
"botania:biomestoneb#variant=mesa" | |||
] | |||
}, | |||
"overlay": { | |||
"state": [ | |||
"botania:biomestonea#variant=forest", | |||
"botania:biomestonea#variant=plains", | |||
"botania:biomestonea#variant=mountain", | |||
"botania:biomestonea#variant=fungal", | |||
"botania:biomestonea#variant=swamp", | |||
"botania:biomestonea#variant=desert", | |||
"botania:biomestonea#variant=taiga", | |||
"botania:biomestonea#variant=mesa" | |||
] | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": [ | |||
"botania:biomestoneb#variant=forest", | |||
"botania:biomestoneb#variant=plains", | |||
"botania:biomestoneb#variant=mountain", | |||
"botania:biomestoneb#variant=fungal", | |||
"botania:biomestoneb#variant=swamp", | |||
"botania:biomestoneb#variant=desert", | |||
"botania:biomestoneb#variant=taiga", | |||
"botania:biomestoneb#variant=mesa" | |||
] | |||
}, | |||
"overlay": { | |||
"state": [ | |||
"botania:biomestonea#variant=forest", | |||
"botania:biomestonea#variant=plains", | |||
"botania:biomestonea#variant=mountain", | |||
"botania:biomestonea#variant=fungal", | |||
"botania:biomestonea#variant=swamp", | |||
"botania:biomestonea#variant=desert", | |||
"botania:biomestonea#variant=taiga", | |||
"botania:biomestonea#variant=mesa" | |||
] | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": [ | |||
"botania:biomestoneb#variant=forest", | |||
"botania:biomestoneb#variant=plains", | |||
"botania:biomestoneb#variant=mountain", | |||
"botania:biomestoneb#variant=fungal", | |||
"botania:biomestoneb#variant=swamp", | |||
"botania:biomestoneb#variant=desert", | |||
"botania:biomestoneb#variant=taiga", | |||
"botania:biomestoneb#variant=mesa" | |||
] | |||
}, | |||
"overlay": { | |||
"state": [ | |||
"botania:biomestonea#variant=forest", | |||
"botania:biomestonea#variant=plains", | |||
"botania:biomestonea#variant=mountain", | |||
"botania:biomestonea#variant=fungal", | |||
"botania:biomestonea#variant=swamp", | |||
"botania:biomestonea#variant=desert", | |||
"botania:biomestonea#variant=taiga", | |||
"botania:biomestonea#variant=mesa" | |||
] | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": [ | |||
"botania:biomestonea#variant=forest_cobble", | |||
"botania:biomestonea#variant=plains_cobble", | |||
"botania:biomestonea#variant=mountain_cobble", | |||
"botania:biomestonea#variant=fungal_cobble", | |||
"botania:biomestonea#variant=swamp_cobble", | |||
"botania:biomestonea#variant=desert_cobble", | |||
"botania:biomestonea#variant=taiga_cobble", | |||
"botania:biomestonea#variant=mesa_cobble" | |||
] | |||
}, | |||
"through": { | |||
"block": "chisel:cobblestone", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:cobblestone" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": [ | |||
"botania:biomestonea#variant=forest_cobble", | |||
"botania:biomestonea#variant=plains_cobble", | |||
"botania:biomestonea#variant=mountain_cobble", | |||
"botania:biomestonea#variant=fungal_cobble", | |||
"botania:biomestonea#variant=swamp_cobble", | |||
"botania:biomestonea#variant=desert_cobble", | |||
"botania:biomestonea#variant=taiga_cobble", | |||
"botania:biomestonea#variant=mesa_cobble" | |||
] | |||
}, | |||
"through": { | |||
"block": "chisel:cobblestone1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:cobblestone" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": [ | |||
"botania:biomestonea#variant=forest_cobble", | |||
"botania:biomestonea#variant=plains_cobble", | |||
"botania:biomestonea#variant=mountain_cobble", | |||
"botania:biomestonea#variant=fungal_cobble", | |||
"botania:biomestonea#variant=swamp_cobble", | |||
"botania:biomestonea#variant=desert_cobble", | |||
"botania:biomestonea#variant=taiga_cobble", | |||
"botania:biomestonea#variant=mesa_cobble" | |||
] | |||
}, | |||
"through": { | |||
"block": "chisel:cobblestone2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:cobblestone" | |||
} | |||
} | |||
] | |||
} |
@@ -7,7 +7,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -25,7 +25,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -43,7 +43,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -61,7 +61,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -79,7 +79,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -97,7 +97,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ |
@@ -7,7 +7,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -25,7 +25,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -43,7 +43,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -61,7 +61,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ |
@@ -0,0 +1,111 @@ | |||
{ | |||
"blocks": [ | |||
{ | |||
"from": { | |||
"state": "fp:dirt#metadata=0" | |||
}, | |||
"through": { | |||
"block": "chisel:dirt", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:dirt#snowy=false,variant=dirt" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "fp:stone#variant=brick" | |||
}, | |||
"overlay": { | |||
"state": "fp:stone#variant=stone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "fp:stone#variant=brick" | |||
}, | |||
"overlay": { | |||
"state": "fp:stone#variant=stone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "fp:stone#variant=brick" | |||
}, | |||
"overlay": { | |||
"state": "fp:stone#variant=stone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "fp:stone#variant=sandstone" | |||
}, | |||
"through": { | |||
"block": "chisel:sandstoneyellow", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:sandstone#type=sandstone" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "fp:stone#variant=sandstone" | |||
}, | |||
"through": { | |||
"block": "chisel:sandstoneyellow1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:sandstone#type=sandstone" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "fp:stone#variant=sandstone" | |||
}, | |||
"through": { | |||
"block": "chisel:sandstoneyellow2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:sandstone#type=sandstone" | |||
} | |||
} | |||
] | |||
} |
@@ -4,6 +4,7 @@ | |||
"from": { | |||
"block": "integrateddynamics:menril_planks" | |||
}, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -21,7 +22,7 @@ | |||
"overlay": { | |||
"state": "integrateddynamics:crystalized_chorus_block" | |||
}, | |||
"blend": true, | |||
"mode": "blend", | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
@@ -39,7 +40,7 @@ | |||
"overlay": { | |||
"state": "integrateddynamics:crystalized_chorus_block" | |||
}, | |||
"blend": true, | |||
"mode": "blend", | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
@@ -57,7 +58,7 @@ | |||
"overlay": { | |||
"state": "integrateddynamics:crystalized_chorus_block" | |||
}, | |||
"blend": true, | |||
"mode": "blend", | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ | |||
@@ -75,7 +76,7 @@ | |||
"overlay": { | |||
"state": "integrateddynamics:crystalized_menril_block" | |||
}, | |||
"blend": true, | |||
"mode": "blend", | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
@@ -93,7 +94,7 @@ | |||
"overlay": { | |||
"state": "integrateddynamics:crystalized_menril_block" | |||
}, | |||
"blend": true, | |||
"mode": "blend", | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
@@ -111,7 +112,7 @@ | |||
"overlay": { | |||
"state": "integrateddynamics:crystalized_menril_block" | |||
}, | |||
"blend": true, | |||
"mode": "blend", | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ |
@@ -7,7 +7,7 @@ | |||
"type" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -25,7 +25,7 @@ | |||
"type" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ |
@@ -7,7 +7,7 @@ | |||
"variant" | |||
] | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ |
@@ -0,0 +1,55 @@ | |||
{ | |||
"blocks": [ | |||
{ | |||
"from": { | |||
"state": "roots:runestone_brick" | |||
}, | |||
"overlay": { | |||
"state": "roots:runestone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "roots:runestone_brick" | |||
}, | |||
"overlay": { | |||
"state": "roots:runestone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "roots:runestone_brick" | |||
}, | |||
"overlay": { | |||
"state": "roots:runestone" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
} | |||
] | |||
} |
@@ -72,7 +72,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_white" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -87,7 +87,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_orange" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -102,7 +102,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_magenta" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -117,7 +117,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_light_blue" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -132,7 +132,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_yellow" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -147,7 +147,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_lime" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -162,7 +162,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_pink" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -177,7 +177,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_gray" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -192,7 +192,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_silver" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -207,7 +207,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_cyan" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -222,7 +222,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_purple" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -237,7 +237,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_blue" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -252,7 +252,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_brown" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -267,7 +267,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_green" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -282,7 +282,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_red" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
@@ -297,7 +297,7 @@ | |||
"from": { | |||
"state": "rustic:painted_wood_black" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ |
@@ -4,7 +4,7 @@ | |||
"from": { | |||
"state": "techreborn:rubber_planks" | |||
}, | |||
"blend": true, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ |
@@ -0,0 +1,70 @@ | |||
{ | |||
"blocks": [ | |||
{ | |||
"from": { | |||
"block": "wizardry:nacre_block_brick" | |||
}, | |||
"overlay": { | |||
"block": "wizardry:nacre_block" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"block": "wizardry:nacre_block_brick" | |||
}, | |||
"overlay": { | |||
"block": "wizardry:nacre_block" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick1", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"block": "wizardry:nacre_block_brick" | |||
}, | |||
"overlay": { | |||
"block": "wizardry:nacre_block" | |||
}, | |||
"through": { | |||
"block": "chisel:stonebrick2", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:stonebrick#variant=stonebrick" | |||
} | |||
}, | |||
{ | |||
"from": { | |||
"state": "wizardry:wisdom_wood_planks" | |||
}, | |||
"mode": "plank", | |||
"through": { | |||
"block": "chisel:planks-oak", | |||
"iterate": [ | |||
"variation" | |||
] | |||
}, | |||
"based_upon": { | |||
"state": "minecraft:planks#variant=oak" | |||
} | |||
} | |||
] | |||
} |