blast furnace progress

This commit is contained in:
DrMangoTea
2023-09-23 16:41:28 +02:00
parent ee22ebc828
commit bda20d7afe
38 changed files with 698 additions and 107 deletions

View File

@@ -1,2 +1,2 @@
// 1.19.2 2023-09-19T14:23:32.3677565 Create: The Factory Must Grow's lang merger
279de59a50ebc382a1a701878d0e99bf46265336 assets/tfmg/lang/en_us.json
// 1.19.2 2023-09-22T16:49:10.0101293 Create: The Factory Must Grow's lang merger
7dc07e2f297d06725fb6b2378b917fb81966a70d assets/tfmg/lang/en_us.json

View File

@@ -1,4 +1,4 @@
// 1.19.2 2023-09-19T14:23:32.3567546 Registrate Provider for tfmg [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
// 1.19.2 2023-09-22T16:49:10.0141303 Registrate Provider for tfmg [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)]
b7f5146505c40c08cdea7ad01fa99048b7ac5451 assets/tfmg/blockstates/aluminum_block.json
933485fa587fccc649b4cbe8f76f15e590cc8bb1 assets/tfmg/blockstates/bauxite.json
2b53ff8e880d35a42388584cb3ca896c55bfaf95 assets/tfmg/blockstates/bauxite_pillar.json
@@ -65,8 +65,8 @@ e29906d296994a13fefc2beb22f7693e1027dd1b assets/tfmg/blockstates/steel_fluid_val
71b4c68d8a02062252c4dfde41650b7667d8c0ca assets/tfmg/blockstates/steel_sheetmetal.json
47b56dad1f2715aae7430b5f9acb1d51a26cf562 assets/tfmg/blockstates/steel_smart_fluid_pipe.json
942bb86fa92b3c40fc535dccdd2e9f3b79a36d92 assets/tfmg/blockstates/surface_scanner.json
67b8a6fd76d364c98275a66fb3f4cc9bbb043359 assets/tfmg/lang/en_ud.json
4bb8653cbdb013bc36e507bc2408c5b4279a4864 assets/tfmg/lang/en_us.json
fd454201619789195f2c164c19e2f61ab727bfe5 assets/tfmg/lang/en_ud.json
e80d79d10c0e092c3a2b7b8a97d08fb38a6f7e76 assets/tfmg/lang/en_us.json
9e6a6b62f5e7528c4e4d4f72f3510edcd8f0c078 assets/tfmg/models/block/aluminum_block.json
5a4c785e8d8394ccd125732c0017459648574c4e assets/tfmg/models/block/bauxite_natural_0.json
4ace0da00498fcbb9ddfdf321767b40b095c8778 assets/tfmg/models/block/bauxite_natural_1.json
@@ -190,6 +190,7 @@ fc48286f0e70651f3d5a915558c3c91ae3ad0da6 assets/tfmg/models/item/cast_iron_disti
da2c28e98d0ddf7166bdf7214c06e81ad8581b90 assets/tfmg/models/item/cast_iron_ingot.json
d45fc5511b4c4027889afd3088cd91ba1d8b0501 assets/tfmg/models/item/coal_coke.json
3789a9d72a7ba5daf8c39cccaa665057e63302c6 assets/tfmg/models/item/coal_coke_block.json
cf3c486158a27cbd3a4ef9fdd79dc93f3cc12b45 assets/tfmg/models/item/coal_coke_dust.json
4a843d55647a606fa97bc2daf745a7603406767d assets/tfmg/models/item/concrete.json
e8c4e68647a6ced815cfca649c679e709fcc7751 assets/tfmg/models/item/cooling_fluid_bucket.json
df4e7fa8f3f60908f58794528a8db60dce7d0135 assets/tfmg/models/item/copper_grenade.json
@@ -270,6 +271,7 @@ a779b7e09e7de79b73efb212644edff6739da610 data/forge/tags/items/buckets/napalm.js
fdf3b8fdf1975b0eee671f428803caa4e17dc5bd data/forge/tags/items/buckets/naphtha.json
5f98116af6d1d5e0324ff11449e719e7e2593c0c data/forge/tags/items/buckets/plastic.json
f0989952061266a02499103c1dcd9f2d7da131f5 data/forge/tags/items/concrete.json
f1cc6d710a5e49ab33dbaceea796f0c0b589c82b data/forge/tags/items/dusts/coal_coke.json
70e609465aa949ff4acc873fb19d4afc07f79aa1 data/forge/tags/items/ingots/aluminum.json
2da28c9441f79389929080f6f31da841bbee19e7 data/forge/tags/items/ingots/cast_iron.json
6746e7b0c2ed4053e7b438c3e99e86889fa9d454 data/forge/tags/items/ingots/lead.json

View File

@@ -93,6 +93,7 @@
"item.tfmg.aluminum_ingot": "ʇobuI ɯnuıɯnןⱯ",
"item.tfmg.cast_iron_ingot": "ʇobuI uoɹI ʇsɐƆ",
"item.tfmg.coal_coke": "ǝʞoƆ ןɐoƆ",
"item.tfmg.coal_coke_dust": "ʇsnᗡ ǝʞoƆ ןɐoƆ",
"item.tfmg.cooling_fluid_bucket": "ʇǝʞɔnᗺ pınןℲ buıןooƆ",
"item.tfmg.copper_grenade": "ǝpɐuǝɹ⅁ ɹǝddoƆ",
"item.tfmg.creosote_bucket": "ʇǝʞɔnᗺ ǝʇosoǝɹƆ",

View File

@@ -99,6 +99,7 @@
"item.tfmg.aluminum_ingot": "Aluminum Ingot",
"item.tfmg.cast_iron_ingot": "Cast Iron Ingot",
"item.tfmg.coal_coke": "Coal Coke",
"item.tfmg.coal_coke_dust": "Coal Coke Dust",
"item.tfmg.cooling_fluid_bucket": "Cooling Fluid Bucket",
"item.tfmg.copper_grenade": "Copper Grenade",
"item.tfmg.creosote_bucket": "Creosote Bucket",
@@ -119,26 +120,6 @@
"item.tfmg.thermite_grenade": "Thermite Grenade",
"item.tfmg.zinc_grenade": "Zinc Grenade",
"itemGroup.tfmg.base": "Create: The Factory Must Grow",
"itemGroup.tfmg.building": "Create: TFMG's Building Blocks",
"create.goggles.misc.number": "%1$s",
"create.goggles.misc.dot_one": ".",
"create.goggles.misc.dot_two": "..",
"create.goggles.misc.dot_three": "...",
"create.goggles.fluid_in_tank": "Fluid In Tank:",
"create.goggles.surface_scanner.no_rotation": "No Rotation Provided",
"create.goggles.surface_scanner.no_deposit": "No Deposit Found",
"create.goggles.surface_scanner.deposit_found": "Found Deposit",
"create.goggles.surface_scanner.distance": "Distance: %1$s Blocks",
"create.goggles.surface_scanner.scanning_surface": "Scanning Surface",
"create.goggles.distillation_tower.status": "Distillation Tower Info:",
"create.goggles.distillation_tower.tank_not_found": "Steel Fluid Tank Not Found",
"create.goggles.distillation_tower.not_tall_enough": "Distillation Tower is Not Tall Enough",
"create.goggles.distillation_tower.level": "Distillation Tower Level: %1$s",
"create.goggles.distillation_tower.found_outputs": "Found Outputs: %1$s",
"create.goggles.distillation_tower.no_outputs": "No Output Blocks Found",
"_": "->------------------------] UI & Messages [------------------------<-",
@@ -161,6 +142,17 @@
"create.goggles.distillation_tower.level": "Distillation Tower Level: %1$s",
"create.goggles.distillation_tower.found_outputs": "Found Outputs: %1$s",
"create.goggles.distillation_tower.no_outputs": "No Output Blocks Found",
"create.goggles.blast_furnace.stats": "Blast Furnace Stats:",
"create.goggles.blast_furnace.size_stats": "Size Stats:",
"create.goggles.blast_furnace.fuel_amount": "Fuel Amount: %1$s",
"create.goggles.blast_furnace.item_count": "Item Count: %1$s",
"create.goggles.blast_furnace.height": "Height: %1$s",
"create.goggles.blast_furnace.reinforcement_height": "Reinforcement Height: %1$s",
"create.goggles.blast_furnace.status.off": "Status: Off",
"create.goggles.blast_furnace.status.running": "Status: Running",
"create.goggles.blast_furnace.status.finished": "Status: Process Finished",
"create.goggles.blast_furnace.diameter.one": "Diameter: 1",
"create.goggles.blast_furnace.diameter.two": "Diameter: 2",
"_": "Thank you for translating Create: The Factory Must Grow!"

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "tfmg:item/coal_coke_dust"
}
}

View File

@@ -0,0 +1,5 @@
{
"values": [
"tfmg:coal_coke_dust"
]
}

View File

@@ -92,17 +92,7 @@ public class FormWorkRenderer extends SafeBlockEntityRenderer<FormWorkBlockEntit
if (fluidLevel == null) {
return;
}
float level = fluidLevel.getValue(partialTicks);
float capHeight = 1 / 4f;
float tankHullWidth = 1 / 16f + 1 / 128f;
float minPuddleHeight = 1 / 16f;
// float level = fluidLevel.getValue(partialTicks);
// if (level < 1 / (512f * 1))
// return;
// float clampedLevel = Mth.clamp(level * 1, 0, 1);
FluidTank tank = be.tankInventory;
FluidStack fluidStack = tank.getFluid();

View File

@@ -1,10 +1,8 @@
package com.drmangotea.tfmg.content.items;
import com.drmangotea.tfmg.content.machines.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.content.machines.pipes.normal.steel.SteelPipeBlock;
import com.drmangotea.tfmg.content.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionResult;

View File

@@ -0,0 +1,33 @@
package com.drmangotea.tfmg.content.machines.metal_processing.blast_furnace.blast_furnace_output;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.simibubi.create.foundation.block.IBE;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
public class BlastFurnaceOutputBlock extends HorizontalDirectionalBlock implements IBE<BlastFurnaceOutputBlockEntity> {
public BlastFurnaceOutputBlock(Properties p_54120_) {
super(p_54120_);
}
public BlockState getStateForPlacement(BlockPlaceContext p_48781_) {
return this.defaultBlockState().setValue(FACING, p_48781_.getHorizontalDirection().getOpposite());
}
@Override
public Class<BlastFurnaceOutputBlockEntity> getBlockEntityClass() {
return BlastFurnaceOutputBlockEntity.class;
}
@Override
public BlockEntityType<? extends BlastFurnaceOutputBlockEntity> getBlockEntityType() {
return TFMGBlockEntities.BLAST_FURNACE_OUTPUT.get();
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {
super.createBlockStateDefinition(pBuilder.add(FACING));
}
}

View File

@@ -0,0 +1,482 @@
package com.drmangotea.tfmg.content.machines.metal_processing.blast_furnace.blast_furnace_output;
import com.drmangotea.tfmg.content.machines.TFMGMachineBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.drmangotea.tfmg.registry.TFMGItems;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.simibubi.create.foundation.item.SmartInventory;
import com.simibubi.create.foundation.utility.Lang;
import com.simibubi.create.foundation.utility.animation.LerpedFloat;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandlerModifiable;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
import static net.minecraft.world.level.block.HorizontalDirectionalBlock.FACING;
public class BlastFurnaceOutputBlockEntity extends TFMGMachineBlockEntity implements IHaveGoggleInformation {
public BlastFurnaceType type;
public Direction outputFacing = getBlockState().getValue(FACING);
public BlockPos mainFloor;
public int height=2;
public int reinforcementHeight = 0;
public LerpedFloat coalCokeHeight = LerpedFloat.linear();
//item storage
public LazyOptional<IItemHandlerModifiable> itemCapability;
public SmartInventory inputInventory;
public SmartInventory fuelInventory;
public BlastFurnaceOutputBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
inputInventory = new SmartInventory(1, this).forbidInsertion()
.withMaxStackSize(64);
fuelInventory = new SmartInventory(1, this).forbidInsertion()
.withMaxStackSize(64);
itemCapability = LazyOptional.of(() -> new CombinedInvWrapper(inputInventory,fuelInventory));
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
super.addBehaviours(behaviours);
}
public void tick(){
super.tick();
outputFacing = getBlockState().getValue(FACING);
coalCokeHeight.chase(fuelInventory.getStackInSlot(0).getCount(), 0.1f, LerpedFloat.Chaser.EXP);
coalCokeHeight.tickChaser();
checkType();
if(type == BlastFurnaceType.INVALID)
return;
List<ItemEntity> itemsToPick = getItemsToPick(type);
for(ItemEntity itemEntity : itemsToPick){
ItemStack itemStack = itemEntity.getItem();
if(itemStack.is(TFMGItems.COAL_COKE_DUST.get())){
int freeSpace = fuelInventory.getStackInSlot(0).getMaxStackSize()-fuelInventory.getStackInSlot(0).getCount();
int coalCokeCount = itemStack.getCount();
//if(itemStack == ItemStack.EMPTY)
// continue;
if(coalCokeCount>freeSpace){
itemStack.setCount(itemStack.getCount()-freeSpace);
fuelInventory.setItem(0 ,new ItemStack (TFMGItems.COAL_COKE_DUST.get(),fuelInventory.getStackInSlot(0).getCount()+freeSpace));
}else {
fuelInventory.setItem(0 ,new ItemStack (TFMGItems.COAL_COKE_DUST.get(),fuelInventory.getStackInSlot(0).getCount()+itemStack.getCount()));
itemEntity.discard();
}
continue;
}
itemEntity.discard();
}
}
@Override
public boolean addToGoggleTooltip(List<Component> tooltip, boolean isPlayerSneaking) {
// Lang.translate("goggles.surface_scanner.distance", fuelInventory.getItem(0).getCount())
// .style(ChatFormatting.GREEN)
// .forGoggles(tooltip,1);
Lang.translate("goggles.surface_scanner.distance", reinforcementHeight)
.style(ChatFormatting.GREEN)
.forGoggles(tooltip,1);
return true;
}
@Override
protected void read(CompoundTag compound, boolean clientPacket) {
super.read(compound, clientPacket);
inputInventory.deserializeNBT(compound.getCompound("InputItems"));
fuelInventory.deserializeNBT(compound.getCompound("Fuel"));
}
@Override
public void write(CompoundTag compound, boolean clientPacket) {
super.write(compound, clientPacket);
compound.put("InputItems", inputInventory.serializeNBT());
compound.put("Fuel", fuelInventory.serializeNBT());
}
@Override
public void invalidate() {
super.invalidate();
itemCapability.invalidate();
}
@Nonnull
@Override
@SuppressWarnings("'net.minecraftforge.items.CapabilityItemHandler' is deprecated and marked for removal ")
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, Direction side) {
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
return itemCapability.cast();
if (cap == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY)
return fluidCapability.cast();
return super.getCapability(cap, side);
}
public void checkType(){
mainFloor = this.getBlockPos().relative(outputFacing.getOpposite());
if(!isValidBlock(mainFloor)) {
type = BlastFurnaceType.INVALID;
return;
}
if(!isAboveClear(mainFloor)){
type = BlastFurnaceType.INVALID;
return;
}
if(canBeSmall())
type = BlastFurnaceType.SMALL;
if(canBeBigLeft())
type = BlastFurnaceType.BIG_LEFT;
if(canBeBigRight())
type = BlastFurnaceType.BIG_RIGHT;
if(
!canBeBigLeft()&&
!canBeBigRight()&&
!canBeSmall()
)type = BlastFurnaceType.INVALID;
}
public boolean isAboveClear(BlockPos pos){
pos = pos.above();
return level.getBlockState(pos).is(Blocks.AIR);
}
public boolean isAboveValid(BlockPos pos){
return isAboveValid(pos,false);
}
public boolean isAboveValid(BlockPos pos,boolean firstCheck){
pos = pos.above();
boolean isValid = level.getBlockState(pos).is(TFMGBlocks.FIREPROOF_BRICKS.get());
BlockPos pos1 = pos.above();
int height=2;
for(int i=0; i <8; i++){
if(level.getBlockState(pos1).is(TFMGBlocks.FIREPROOF_BRICKS.get())){
height++;
} else {
break;
}
pos1 = pos1.above();
}
if(height<=this.height||firstCheck)
this.height=height;
return isValid;
}
//
public void isReinforcement(BlockPos pos){
this.isReinforcement(pos,false);
}
public void isReinforcement(BlockPos pos,boolean firstCheck){
BlockPos pos1 = pos;
int height=0;
for(int i=0; i <8; i++){
if(level.getBlockState(pos1).is(TFMGBlocks.FIREPROOF_BRICK_REINFORCEMENT.get())){
height++;
} else {
break;
}
pos1 = pos1.above();
}
if(height<=this.reinforcementHeight||firstCheck)
this.reinforcementHeight=height;
}
public boolean isValidBlock(BlockPos pos){
return level.getBlockState(pos).is(TFMGBlocks.FIREPROOF_BRICKS.get());
}
//its average :/
public boolean canBeSmall(){
BlockPos checkedPos=this.getBlockPos().relative(outputFacing.getOpposite());
BlockPos mainPos = checkedPos;
if(!isValidBlock(mainPos))
return false;
if(!isAboveClear(mainPos))
return false;
checkedPos = mainPos.relative(outputFacing.getClockWise());
if(!isValidBlock(checkedPos))
return false;
if(!isAboveValid(checkedPos,true))
return false;
checkedPos = mainPos.relative(outputFacing.getCounterClockWise());
if(!isValidBlock(checkedPos))
return false;
if(!isAboveValid(checkedPos))
return false;
checkedPos = mainPos.relative(outputFacing);
if(!isAboveValid(checkedPos))
return false;
isReinforcement(checkedPos.relative(outputFacing.getCounterClockWise()),true);
isReinforcement(checkedPos.relative(outputFacing.getClockWise()));
isReinforcement(mainPos.relative(outputFacing.getOpposite()).relative(outputFacing.getCounterClockWise()));
isReinforcement(mainPos.relative(outputFacing.getOpposite()).relative(outputFacing.getClockWise()));
// level.setBlock(checkedPos.above(5), Blocks.GOLD_BLOCK.defaultBlockState(), 3);
return true;
}
public boolean canBeBigRight(){
mainFloor = this.getBlockPos().relative(outputFacing.getOpposite());
BlockPos checkedPos = this.getBlockPos().relative(outputFacing.getCounterClockWise());
for(int i = 0; i<4; i++){
for(int y = 0; y<4; y++){
if(
!(i ==0 && y ==0)&&
!(i ==3 && y ==3)&&
!(i ==0 && y ==3)&&
!(i ==3 && y ==0)
) {
if( i ==1 && y ==0){
if(isAboveValid(checkedPos)) {
checkedPos = checkedPos.relative(outputFacing.getOpposite());
continue;
} else return false;
}
if(!isValidBlock(checkedPos)) {
return false;
}
if(i==0&&y==1){
if(!isAboveValid(checkedPos,true)) {
return false;
}
}
if(
i ==0 || i ==3 ||
y == 0 || y == 3
){
if(!isAboveValid(checkedPos)) {
return false;
}
}
else
if(!isAboveClear(checkedPos)) {
return false;
}
} else{
//reinforcements
if(i ==0 && y ==0)
isReinforcement(checkedPos,true);
isReinforcement(checkedPos);
}
checkedPos = checkedPos.relative(outputFacing.getOpposite());
}
checkedPos= checkedPos.relative(outputFacing,4);
checkedPos= checkedPos.relative(outputFacing.getClockWise());
}
// level.setBlock(checkedPos.above(5), Blocks.DIAMOND_BLOCK.defaultBlockState(), 3);
return true;
}
public boolean canBeBigLeft(){
mainFloor = this.getBlockPos().relative(outputFacing.getOpposite());
BlockPos checkedPos = this.getBlockPos().relative(outputFacing.getClockWise());
for(int i = 0; i<4; i++){
for(int y = 0; y<4; y++){
if(
!(i ==0 && y ==0)&&
!(i ==3 && y ==3)&&
!(i ==0 && y ==3)&&
!(i ==3 && y ==0)
) {
if( i ==1 && y ==0){
if(isAboveValid(checkedPos)) {
checkedPos = checkedPos.relative(outputFacing.getOpposite());
continue;
} else return false;
}
if(!isValidBlock(checkedPos)) {
return false;
}
if(i==0&&y==1){
if(!isAboveValid(checkedPos,true)) {
return false;
}
}
if(
i ==0 || i ==3 ||
y == 0 || y == 3
){
if(!isAboveValid(checkedPos)) {
return false;
}
}
else
if(!isAboveClear(checkedPos)) {
return false;
}
}else{
//reinforcements
if(i ==0 && y ==0)
isReinforcement(checkedPos,true);
isReinforcement(checkedPos);
}
checkedPos = checkedPos.relative(outputFacing.getOpposite());
}
checkedPos= checkedPos.relative(outputFacing,4);
checkedPos= checkedPos.relative(outputFacing.getCounterClockWise());
}
// level.setBlock(checkedPos.above(5), Blocks.EMERALD_BLOCK.defaultBlockState(), 3);
return true;
}
public List<ItemEntity> getItemsToPick(BlastFurnaceType type) {
AABB searchArea=null;
AABB searchArea1=null;
AABB searchArea2=null;
AABB searchArea3=null;
if(type == BlastFurnaceType.SMALL)
searchArea = new AABB(this.getBlockPos().relative(outputFacing.getOpposite()).above());
if(type == BlastFurnaceType.BIG_RIGHT) {
searchArea = new AABB(this.getBlockPos().relative(outputFacing.getOpposite()).above());
searchArea1 = new AABB(this.getBlockPos().relative(outputFacing.getOpposite(), 2).above());
searchArea2 = new AABB(this.getBlockPos().relative(outputFacing.getOpposite(), 2).above().relative(outputFacing.getClockWise()));
searchArea3 = new AABB(this.getBlockPos().relative(outputFacing.getOpposite()).above().relative(outputFacing.getClockWise()));
}
if(type == BlastFurnaceType.BIG_LEFT) {
searchArea = new AABB(this.getBlockPos().relative(outputFacing.getOpposite()).above());
searchArea1 = new AABB(this.getBlockPos().relative(outputFacing.getOpposite(), 2).above());
searchArea2 = new AABB(this.getBlockPos().relative(outputFacing.getOpposite(), 2).above().relative(outputFacing.getCounterClockWise()));
searchArea3 = new AABB(this.getBlockPos().relative(outputFacing.getOpposite()).above().relative(outputFacing.getCounterClockWise()));
}
if(searchArea1!=null){
List<ItemEntity> itemList= new ArrayList<>();
itemList.addAll(level.getEntitiesOfClass(ItemEntity.class, searchArea));
itemList.addAll(level.getEntitiesOfClass(ItemEntity.class, searchArea1));
itemList.addAll(level.getEntitiesOfClass(ItemEntity.class, searchArea2));
itemList.addAll(level.getEntitiesOfClass(ItemEntity.class, searchArea3));
return itemList;
}
return level.getEntitiesOfClass(ItemEntity.class, searchArea);
}
public enum BlastFurnaceType{
SMALL,
BIG_LEFT,
BIG_RIGHT,
INVALID
}
}

View File

@@ -0,0 +1,64 @@
package com.drmangotea.tfmg.content.machines.metal_processing.blast_furnace.blast_furnace_output;
import com.drmangotea.tfmg.registry.TFMGPartialModels;
import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer;
import com.simibubi.create.foundation.render.CachedBufferer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.level.block.state.BlockState;
public class BlastFurnaceRenderer extends SafeBlockEntityRenderer<BlastFurnaceOutputBlockEntity> {
public BlastFurnaceRenderer(BlockEntityRendererProvider.Context context) {}
@Override
protected void renderSafe(BlastFurnaceOutputBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
ms.pushPose();
TransformStack msr = TransformStack.cast(ms);
msr.translate(1 / 2f, 0.5, 1 / 2f);
float coalCokeLevel = be.coalCokeHeight.getValue()/32;
this.renderNorth(be,partialTicks,ms,buffer,light,overlay,coalCokeLevel);
ms.popPose();
}
protected void renderNorth(BlastFurnaceOutputBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay,float height) {
BlockState blockState = be.getBlockState();
VertexConsumer vb = buffer.getBuffer(RenderType.solid());
//small
if (be.type == BlastFurnaceOutputBlockEntity.BlastFurnaceType.SMALL) {
CachedBufferer.partial(TFMGPartialModels.COAL_COKE_DUST_LAYER, blockState)
.centre()
.translateX(-1)
.translateY(height)
.light(light)
.renderInto(ms, vb);
}
}
@Override
public boolean shouldRenderOffScreen(BlastFurnaceOutputBlockEntity te) {
return true;
}
}

View File

@@ -1,7 +1,7 @@
package com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlock;
import com.drmangotea.tfmg.content.tanks.SteelTankBlock;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.block.IBE;
@@ -14,25 +14,9 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.pathfinder.PathComputationType;
import com.simibubi.create.AllShapes;
import com.simibubi.create.content.equipment.wrench.IWrenchable;
import com.simibubi.create.foundation.advancement.AdvancementBehaviour;
import com.simibubi.create.foundation.block.IBE;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.FaceAttachedHorizontalDirectionalBlock;
import net.minecraft.world.level.block.SimpleWaterloggedBlock;
import net.minecraft.world.level.block.state.StateDefinition;
public class DistillationControllerBlock extends FaceAttachedHorizontalDirectionalBlock

View File

@@ -1,7 +1,7 @@
package com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryControllerBlockEntity;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlockEntity;
import com.drmangotea.tfmg.content.tanks.SteelTankBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.simibubi.create.content.equipment.goggles.IHaveGoggleInformation;
import com.simibubi.create.foundation.utility.Lang;

View File

@@ -1,8 +1,8 @@
package com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlock;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlockEntity;
import com.drmangotea.tfmg.content.tanks.SteelTankBlock;
import com.drmangotea.tfmg.content.tanks.SteelTankBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.drmangotea.tfmg.registry.TFMGFluids;
import com.simibubi.create.Create;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.normal;
package com.drmangotea.tfmg.content.pipes.normal;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlockEntity;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.normal;
package com.drmangotea.tfmg.content.pipes.normal;
import com.simibubi.create.content.fluids.pipes.FluidPipeBlockEntity;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.normal.steel;
package com.drmangotea.tfmg.content.pipes.normal.steel;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.normal.steel;
package com.drmangotea.tfmg.content.pipes.normal.steel;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.normal.steel;
package com.drmangotea.tfmg.content.pipes.normal.steel;
import com.drmangotea.tfmg.registry.TFMGPartialModels;
import com.simibubi.create.content.decoration.bracket.BracketedBlockEntityBehaviour;

View File

@@ -1,8 +1,7 @@
package com.drmangotea.tfmg.content.machines.pipes.normal.steel;
package com.drmangotea.tfmg.content.pipes.normal.steel;
import com.drmangotea.tfmg.CreateTFMG;
import com.drmangotea.tfmg.content.machines.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.content.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.simibubi.create.AllBlocks;
@@ -28,20 +27,15 @@ import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.concurrent.locks.Lock;
public class SteelPipeBlock extends FluidPipeBlock {
// public static final BooleanProperty LOCKEDDDD = BlockStateProperties.LOCKED;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.pumps;
package com.drmangotea.tfmg.content.pipes.pumps;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.smart_pipes;
package com.drmangotea.tfmg.content.pipes.smart_pipes;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.pipes.valves;
package com.drmangotea.tfmg.content.pipes.valves;
import javax.annotation.Nonnull;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.tanks;
package com.drmangotea.tfmg.content.tanks;
import com.drmangotea.tfmg.base.TFMGSpriteShifts;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.tanks;
package com.drmangotea.tfmg.content.tanks;
import com.drmangotea.tfmg.registry.TFMGPartialModels;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.tanks;
package com.drmangotea.tfmg.content.tanks;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.tanks;
package com.drmangotea.tfmg.content.tanks;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationTowerData;
@@ -14,7 +14,6 @@ import com.simibubi.create.infrastructure.config.AllConfigs;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlock.Shape;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.block.entity.BlockEntity;
@@ -285,18 +284,18 @@ public class SteelTankBlockEntity extends FluidTankBlockEntity implements IHaveG
if (!SteelTankBlock.isTank(blockState))
continue;
Shape shape = Shape.PLAIN;
SteelTankBlock.Shape shape = SteelTankBlock.Shape.PLAIN;
if (window) {
// SIZE 1: Every tank has a window
if (width == 1)
shape = Shape.WINDOW;
shape = SteelTankBlock.Shape.WINDOW;
// SIZE 2: Every tank has a corner window
if (width == 2)
shape = xOffset == 0 ? zOffset == 0 ? Shape.WINDOW_NW : Shape.WINDOW_SW
: zOffset == 0 ? Shape.WINDOW_NE : Shape.WINDOW_SE;
shape = xOffset == 0 ? zOffset == 0 ? SteelTankBlock.Shape.WINDOW_NW : SteelTankBlock.Shape.WINDOW_SW
: zOffset == 0 ? SteelTankBlock.Shape.WINDOW_NE : SteelTankBlock.Shape.WINDOW_SE;
// SIZE 3: Tanks in the center have a window
if (width == 3 && abs(abs(xOffset) - abs(zOffset)) == 1)
shape = Shape.WINDOW;
shape = SteelTankBlock.Shape.WINDOW;
}
level.setBlock(pos, blockState.setValue(SteelTankBlock.SHAPE, shape), 22);

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.tanks;
package com.drmangotea.tfmg.content.tanks;
import com.simibubi.create.foundation.data.AssetLookup;
import com.simibubi.create.foundation.data.SpecialBlockStateGen;

View File

@@ -1,4 +1,4 @@
package com.drmangotea.tfmg.content.machines.tanks;
package com.drmangotea.tfmg.content.tanks;
import com.drmangotea.tfmg.registry.TFMGBlockEntities;

View File

@@ -1,8 +1,7 @@
package com.drmangotea.tfmg.mixins;
import com.drmangotea.tfmg.CreateTFMG;
import com.drmangotea.tfmg.content.machines.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.drmangotea.tfmg.content.pipes.normal.LockablePipeBlockEntity;
import com.simibubi.create.AllBlockEntityTypes;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.content.contraptions.ITransformableBlock;

View File

@@ -1,7 +1,6 @@
package com.drmangotea.tfmg.mixins;
import com.drmangotea.tfmg.content.machines.pipes.normal.steel.SteelPipeBlock;
import com.drmangotea.tfmg.registry.TFMGBlocks;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllTags;
@@ -24,8 +23,6 @@ import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.LiquidBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;

View File

@@ -7,6 +7,8 @@ import com.drmangotea.tfmg.content.decoration.doors.TFMGSlidingDoorRenderer;
import com.drmangotea.tfmg.content.deposits.FluidDepositBlockEntity;
import com.drmangotea.tfmg.content.deposits.surface_scanner.SurfaceScannerRenderer;
import com.drmangotea.tfmg.content.deposits.surface_scanner.SurfaceScannerTileEntity;
import com.drmangotea.tfmg.content.machines.metal_processing.blast_furnace.blast_furnace_output.BlastFurnaceOutputBlockEntity;
import com.drmangotea.tfmg.content.machines.metal_processing.blast_furnace.blast_furnace_output.BlastFurnaceRenderer;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationControllerBlockEntity;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationOutputBlockEntity;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryControllerBlockEntity;
@@ -21,9 +23,9 @@ import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holde
import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderBlockEntity;
import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputRenderer;
import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlockEntity;
import com.drmangotea.tfmg.content.machines.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.content.machines.tanks.SteelFluidTankRenderer;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlockEntity;
import com.drmangotea.tfmg.content.pipes.normal.LockablePipeBlockEntity;
import com.drmangotea.tfmg.content.tanks.SteelFluidTankRenderer;
import com.drmangotea.tfmg.content.tanks.SteelTankBlockEntity;
import com.simibubi.create.content.fluids.pipes.SmartFluidPipeBlockEntity;
import com.simibubi.create.content.fluids.pipes.StraightPipeBlockEntity;
import com.simibubi.create.content.fluids.pipes.TransparentStraightPipeRenderer;
@@ -162,6 +164,12 @@ public class TFMGBlockEntities {
.renderer(() -> PumpjackBaseRenderer::new)
.register();
public static final BlockEntityEntry<BlastFurnaceOutputBlockEntity> BLAST_FURNACE_OUTPUT = REGISTRATE
.blockEntity("blast_furnace_output", BlastFurnaceOutputBlockEntity::new)
.renderer(() -> BlastFurnaceRenderer::new)
.validBlocks(TFMGBlocks.BLAST_FURNACE_OUTPUT)
.register();
public static void register() {}
}

View File

@@ -11,6 +11,7 @@ import com.drmangotea.tfmg.content.gadgets.explosives.napalm.NapalmBombBlock;
import com.drmangotea.tfmg.content.items.CoalCokeBlockItem;
import com.drmangotea.tfmg.content.items.FossilstoneItem;
import com.drmangotea.tfmg.content.deposits.surface_scanner.SurfaceScannerBlock;
import com.drmangotea.tfmg.content.machines.metal_processing.blast_furnace.blast_furnace_output.BlastFurnaceOutputBlock;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationControllerBlock;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillation_tower.DistillationOutputBlock;
import com.drmangotea.tfmg.content.machines.oil_processing.distillation.distillery.DistilleryControllerBlock;
@@ -19,17 +20,17 @@ import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.base.Pumpjac
import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.crank.PumpjackCrankBlock;
import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.hammer_holder.PumpjackHammerHolderBlock;
import com.drmangotea.tfmg.content.machines.oil_processing.pumpjack.machine_input.MachineInputBlock;
import com.drmangotea.tfmg.content.machines.pipes.normal.steel.EncasedSteelPipeBlock;
import com.drmangotea.tfmg.content.machines.pipes.normal.steel.GlassSteelPipeBlock;
import com.drmangotea.tfmg.content.machines.pipes.normal.steel.SteelPipeAttachmentModel;
import com.drmangotea.tfmg.content.machines.pipes.normal.steel.SteelPipeBlock;
import com.drmangotea.tfmg.content.machines.pipes.pumps.TFMGPumpBlock;
import com.drmangotea.tfmg.content.machines.pipes.smart_pipes.TFMGSmartFluidPipeBlock;
import com.drmangotea.tfmg.content.machines.pipes.valves.TFMGFluidValveBlock;
import com.drmangotea.tfmg.content.machines.tanks.SteelFluidTankModel;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankBlock;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankGenerator;
import com.drmangotea.tfmg.content.machines.tanks.SteelTankItem;
import com.drmangotea.tfmg.content.pipes.normal.steel.EncasedSteelPipeBlock;
import com.drmangotea.tfmg.content.pipes.normal.steel.GlassSteelPipeBlock;
import com.drmangotea.tfmg.content.pipes.normal.steel.SteelPipeAttachmentModel;
import com.drmangotea.tfmg.content.pipes.normal.steel.SteelPipeBlock;
import com.drmangotea.tfmg.content.pipes.pumps.TFMGPumpBlock;
import com.drmangotea.tfmg.content.pipes.smart_pipes.TFMGSmartFluidPipeBlock;
import com.drmangotea.tfmg.content.pipes.valves.TFMGFluidValveBlock;
import com.drmangotea.tfmg.content.tanks.SteelFluidTankModel;
import com.drmangotea.tfmg.content.tanks.SteelTankBlock;
import com.drmangotea.tfmg.content.tanks.SteelTankGenerator;
import com.drmangotea.tfmg.content.tanks.SteelTankItem;
import com.simibubi.create.AllBlocks;
import com.simibubi.create.AllSpriteShifts;
import com.simibubi.create.content.decoration.encasing.CasingBlock;
@@ -352,7 +353,7 @@ public static final BlockEntry<DistillationOutputBlock> STEEL_DISTILLATION_OUTPU
.build()
.lang("Fireproof Brick Reinforcement")
.register();
public static final BlockEntry<Block> BLAST_FURNACE_OUTPUT = REGISTRATE.block("blast_furnace_output", Block::new)
public static final BlockEntry<BlastFurnaceOutputBlock> BLAST_FURNACE_OUTPUT = REGISTRATE.block("blast_furnace_output", BlastFurnaceOutputBlock::new)
.initialProperties(() -> Blocks.BRICKS)
.properties(p -> p.color(MaterialColor.COLOR_RED))
.properties(p -> p.requiresCorrectToolForDrops())

View File

@@ -31,6 +31,9 @@ public class TFMGItems {
ALUMINUM_INGOT = taggedIngredient("aluminum_ingot", forgeItemTag("ingots/aluminum"), CREATE_INGOTS.tag),
LEAD_INGOT = taggedIngredient("lead_ingot", forgeItemTag("ingots/lead"), CREATE_INGOTS.tag);
public static final ItemEntry<Item>
COAL_COKE_DUST = taggedIngredient("coal_coke_dust", forgeItemTag("dusts/coal_coke"));
public static final ItemEntry<QuadPotatoCannonItem> QUAD_POTATO_CANNON =

View File

@@ -18,6 +18,7 @@ import java.util.Map;
public class TFMGPartialModels {
public static final PartialModel
COAL_COKE_DUST_LAYER = block("coal_coke_dust_layer"),
PUMPJACK_HAMMER = block("pumpjack/hammer_holder"),
PUMPJACK_FRONT_ROPE = block("pumpjack/pumpjack_front_rope"),
PUMPJACK_CONNECTOR = block("pumpjack/pumpjack_connector"),

View File

@@ -16,5 +16,16 @@
"create.goggles.distillation_tower.not_tall_enough": "Distillation Tower is Not Tall Enough",
"create.goggles.distillation_tower.level": "Distillation Tower Level: %1$s",
"create.goggles.distillation_tower.found_outputs": "Found Outputs: %1$s",
"create.goggles.distillation_tower.no_outputs": "No Output Blocks Found"
"create.goggles.distillation_tower.no_outputs": "No Output Blocks Found",
"create.goggles.blast_furnace.stats": "Blast Furnace Stats:",
"create.goggles.blast_furnace.size_stats": "Size Stats:",
"create.goggles.blast_furnace.fuel_amount": "Fuel Amount: %1$s",
"create.goggles.blast_furnace.item_count": "Item Count: %1$s",
"create.goggles.blast_furnace.height": "Height: %1$s",
"create.goggles.blast_furnace.reinforcement_height": "Reinforcement Height: %1$s",
"create.goggles.blast_furnace.status.off": "Status: Off",
"create.goggles.blast_furnace.status.running": "Status: Running",
"create.goggles.blast_furnace.status.finished": "Status: Process Finished",
"create.goggles.blast_furnace.diameter.one": "Diameter: 1",
"create.goggles.blast_furnace.diameter.two": "Diameter: 2"
}

View File

@@ -0,0 +1,21 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "tfmg:block/steel_block",
"particle": "tfmg:block/steel_block"
},
"elements": [
{
"from": [0, 0.1, 0],
"to": [16, 0.1, 16],
"faces": {
"north": {"uv": [0, 0, 16, 0], "texture": "#0"},
"east": {"uv": [0, 0, 16, 0], "texture": "#0"},
"south": {"uv": [0, 0, 16, 0], "texture": "#0"},
"west": {"uv": [0, 0, 16, 0], "texture": "#0"},
"up": {"uv": [0, 0, 16, 16], "texture": "#0"},
"down": {"uv": [0, 0, 16, 16], "texture": "#0"}
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB