Skip to content

Instantly share code, notes, and snippets.

@hanetzer
Last active May 8, 2020 02:38
Show Gist options
  • Save hanetzer/c30a8a7fdbf0ce8dbd342b54448250b9 to your computer and use it in GitHub Desktop.
Save hanetzer/c30a8a7fdbf0ce8dbd342b54448250b9 to your computer and use it in GitHub Desktop.
IItemPropertyOverride
package slimeknights.tconstruct.blocks;
import com.google.common.collect.ImmutableSet;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.registries.ObjectHolder;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.common.registry.BlockItemRegistryAdapter;
import slimeknights.tconstruct.common.registry.BlockRegistryAdapter;
import slimeknights.tconstruct.library.TinkerRegistry;
import slimeknights.tconstruct.smeltery.block.SearedBlock;
import slimeknights.tconstruct.smeltery.block.SearedGlassBlock;
import slimeknights.tconstruct.smeltery.block.SearedSlabBlock;
import slimeknights.tconstruct.smeltery.block.SearedStairsBlock;
import slimeknights.tconstruct.smeltery.block.SearedTankBlock;
import slimeknights.tconstruct.smeltery.item.TankItem;
import slimeknights.tconstruct.smeltery.tileentity.TankTileEntity;
import static slimeknights.tconstruct.common.TinkerPulse.injected;
@ObjectHolder(TConstruct.modID)
@Mod.EventBusSubscriber(modid = TConstruct.modID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class SmelteryBlocks {
public static final SearedBlock seared_stone = injected();
public static final SearedSlabBlock seared_stone_slab = injected();
public static final SearedStairsBlock seared_stone_stairs = injected();
public static final SearedBlock seared_cobble = injected();
public static final SearedSlabBlock seared_cobble_slab = injected();
public static final SearedStairsBlock seared_cobble_stairs = injected();
public static final SearedBlock seared_paver = injected();
public static final SearedSlabBlock seared_paver_slab = injected();
public static final SearedStairsBlock seared_paver_stairs = injected();
public static final SearedBlock seared_bricks = injected();
public static final SearedSlabBlock seared_bricks_slab = injected();
public static final SearedStairsBlock seared_bricks_stairs = injected();
public static final SearedBlock seared_cracked_bricks = injected();
public static final SearedSlabBlock seared_cracked_bricks_slab = injected();
public static final SearedStairsBlock seared_cracked_bricks_stairs = injected();
public static final SearedBlock seared_fancy_bricks = injected();
public static final SearedSlabBlock seared_fancy_bricks_slab = injected();
public static final SearedStairsBlock seared_fancy_bricks_stairs = injected();
public static final SearedBlock seared_square_bricks = injected();
public static final SearedSlabBlock seared_square_bricks_slab = injected();
public static final SearedStairsBlock seared_square_bricks_stairs = injected();
public static final SearedBlock seared_small_bricks = injected();
public static final SearedSlabBlock seared_small_bricks_slab = injected();
public static final SearedStairsBlock seared_small_bricks_stairs = injected();
public static final SearedBlock seared_triangle_bricks = injected();
public static final SearedSlabBlock seared_triangle_bricks_slab = injected();
public static final SearedStairsBlock seared_triangle_bricks_stairs = injected();
public static final SearedBlock seared_creeper = injected();
public static final SearedSlabBlock seared_creeper_slab = injected();
public static final SearedStairsBlock seared_creeper_stairs = injected();
public static final SearedBlock seared_road = injected();
public static final SearedSlabBlock seared_road_slab = injected();
public static final SearedStairsBlock seared_road_stairs = injected();
public static final SearedBlock seared_tile = injected();
public static final SearedSlabBlock seared_tile_slab = injected();
public static final SearedStairsBlock seared_tile_stairs = injected();
public static final SearedGlassBlock seared_glass = injected();
public static final SearedTankBlock seared_tank = injected();
public static final SearedTankBlock seared_gauge = injected();
public static final SearedTankBlock seared_window = injected();
public static ImmutableSet<Block> validSmelteryBlocks;
public static ImmutableSet<Block> searedStairsSlabs;
public static ImmutableSet<Block> validTinkerTankBlocks;
public static ImmutableSet<Block> validTinkerTankFloorBlocks;
@SubscribeEvent
static void registerBlocks(final RegistryEvent.Register<Block> event) {
BlockRegistryAdapter registry = new BlockRegistryAdapter(event.getRegistry());
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_stone");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_cobble");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_bricks");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_cracked_bricks");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_fancy_bricks");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_square_bricks");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_small_bricks");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_triangle_bricks");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_creeper");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_paver");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_road");
registry.registerSmelterySlabsAndStairs(new SearedBlock(BlockProperties.SMELTERY), "seared_tile");
registry.register(new SearedGlassBlock(BlockProperties.SMELTERY_GLASS), "seared_glass");
registry.register(new SearedTankBlock(BlockProperties.SMELTERY_GLASS), "seared_tank");
registry.register(new SearedTankBlock(BlockProperties.SMELTERY_GLASS), "seared_gauge");
registry.register(new SearedTankBlock(BlockProperties.SMELTERY_GLASS), "seared_window");
}
@SubscribeEvent
static void registerBlockItems(final RegistryEvent.Register<Item> event) {
BlockItemRegistryAdapter registry = new BlockItemRegistryAdapter(event.getRegistry(), TinkerRegistry.tabSmeltery);
registry.registerBlockItem(seared_stone);
registry.registerBlockItem(seared_stone_slab);
registry.registerBlockItem(seared_stone_stairs);
registry.registerBlockItem(seared_cobble);
registry.registerBlockItem(seared_cobble_slab);
registry.registerBlockItem(seared_cobble_stairs);
registry.registerBlockItem(seared_bricks);
registry.registerBlockItem(seared_bricks_slab);
registry.registerBlockItem(seared_bricks_stairs);
registry.registerBlockItem(seared_cracked_bricks);
registry.registerBlockItem(seared_cracked_bricks_slab);
registry.registerBlockItem(seared_cracked_bricks_stairs);
registry.registerBlockItem(seared_fancy_bricks);
registry.registerBlockItem(seared_fancy_bricks_slab);
registry.registerBlockItem(seared_fancy_bricks_stairs);
registry.registerBlockItem(seared_square_bricks);
registry.registerBlockItem(seared_square_bricks_slab);
registry.registerBlockItem(seared_square_bricks_stairs);
registry.registerBlockItem(seared_small_bricks);
registry.registerBlockItem(seared_small_bricks_slab);
registry.registerBlockItem(seared_small_bricks_stairs);
registry.registerBlockItem(seared_triangle_bricks);
registry.registerBlockItem(seared_triangle_bricks_slab);
registry.registerBlockItem(seared_triangle_bricks_stairs);
registry.registerBlockItem(seared_creeper);
registry.registerBlockItem(seared_creeper_slab);
registry.registerBlockItem(seared_creeper_stairs);
registry.registerBlockItem(seared_paver);
registry.registerBlockItem(seared_paver_slab);
registry.registerBlockItem(seared_paver_stairs);
registry.registerBlockItem(seared_road);
registry.registerBlockItem(seared_road_slab);
registry.registerBlockItem(seared_road_stairs);
registry.registerBlockItem(seared_tile);
registry.registerBlockItem(seared_tile_slab);
registry.registerBlockItem(seared_tile_stairs);
registry.registerBlockItem(seared_glass);
registry.registerBlockItem(new TankItem(seared_tank, new Item.Properties().group(TinkerRegistry.tabSmeltery)));
registry.registerBlockItem(seared_gauge);
registry.registerBlockItem(seared_window);
ImmutableSet.Builder<Block> builder = ImmutableSet.builder();
builder.add(seared_stone);
builder.add(seared_cobble);
builder.add(seared_bricks);
builder.add(seared_cracked_bricks);
builder.add(seared_fancy_bricks);
builder.add(seared_square_bricks);
builder.add(seared_small_bricks);
builder.add(seared_triangle_bricks);
builder.add(seared_creeper);
builder.add(seared_paver);
builder.add(seared_road);
builder.add(seared_tile);
builder.add(seared_tank);
builder.add(seared_gauge);
builder.add(seared_window);
//builder.add(smelteryIO);
builder.add(seared_glass);
validSmelteryBlocks = builder.build();
validTinkerTankBlocks = builder.build(); // same blocks right now
validTinkerTankFloorBlocks = ImmutableSet.of(seared_stone, seared_cobble, seared_bricks, seared_cracked_bricks, seared_fancy_bricks, seared_square_bricks, seared_small_bricks, seared_triangle_bricks, seared_creeper, seared_paver, seared_road, seared_tile, seared_glass);//, smelteryIO);
// seared furnace ceiling blocks, no smelteryIO or seared glass
// does not affect sides, those are forced to use seared blocks/tanks where relevant
builder = ImmutableSet.builder();
builder.add(seared_stone);
builder.add(seared_cobble);
builder.add(seared_bricks);
builder.add(seared_cracked_bricks);
builder.add(seared_fancy_bricks);
builder.add(seared_square_bricks);
builder.add(seared_small_bricks);
builder.add(seared_triangle_bricks);
builder.add(seared_creeper);
builder.add(seared_paver);
builder.add(seared_road);
builder.add(seared_tile);
builder.add(seared_stone_slab);
builder.add(seared_cobble_slab);
builder.add(seared_bricks_slab);
builder.add(seared_cracked_bricks_slab);
builder.add(seared_fancy_bricks_slab);
builder.add(seared_square_bricks_slab);
builder.add(seared_small_bricks_slab);
builder.add(seared_triangle_bricks_slab);
builder.add(seared_creeper_slab);
builder.add(seared_paver_slab);
builder.add(seared_road_slab);
builder.add(seared_tile_slab);
builder.add(seared_stone_stairs);
builder.add(seared_cobble_stairs);
builder.add(seared_bricks_stairs);
builder.add(seared_cracked_bricks_stairs);
builder.add(seared_fancy_bricks_stairs);
builder.add(seared_square_bricks_stairs);
builder.add(seared_small_bricks_stairs);
builder.add(seared_triangle_bricks_stairs);
builder.add(seared_creeper_stairs);
builder.add(seared_paver_stairs);
builder.add(seared_road_stairs);
builder.add(seared_tile_stairs);
searedStairsSlabs = builder.build();
}
@SubscribeEvent
static void clientSetup(final FMLClientSetupEvent event) {
RenderTypeLookup.setRenderLayer(seared_glass, (layer) -> layer == RenderType.getCutout());
RenderTypeLookup.setRenderLayer(seared_tank, (layer) -> layer == RenderType.getCutout());
RenderTypeLookup.setRenderLayer(seared_gauge, (layer) -> layer == RenderType.getCutout());
RenderTypeLookup.setRenderLayer(seared_window, (layer) -> layer == RenderType.getCutout());
}
}
{
"parent": "minecraft:block/cube_column",
"textures": {
"particle": "tconstruct:block/smeltery/tank/seared_tank_side",
"top": "tconstruct:block/smeltery/tank/seared_tank_top",
"side": "tconstruct:block/smeltery/tank/seared_tank_side"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "texture": "#top" },
"up": { "texture": "#top" },
"north": { "texture": "#side" },
"south": { "texture": "#side" },
"west": { "texture": "#side" },
"east": { "texture": "#side" }
}
},
{
"from": [ 3, 16, 3 ],
"to": [ 13, 17, 13 ],
"faces": {
"up": { "texture": "#top" },
"north": {
"uv": [ 0, 0, 10, 1 ],
"texture": "#side"
},
"south": {
"uv": [ 0, 0, 10, 1],
"texture": "#side"
},
"west": {
"uv": [ 0, 0, 10, 1],
"texture": "#side"
},
"east": {
"uv": [ 0, 0, 10, 1],
"texture": "#side"
}
}
}
],
"overrides": [
{ "predicate": { "tconstruct:amount": 0.0000 }, "model": "tconstruct:block/smeltery/tank/tank" },
{ "predicate": { "tconstruct:amount": 0.0001 }, "model": "tconstruct:block/smeltery/tank/tank/0" },
{ "predicate": { "tconstruct:amount": 0.0625 }, "model": "tconstruct:block/smeltery/tank/tank/1" },
{ "predicate": { "tconstruct:amount": 0.1875 }, "model": "tconstruct:block/smeltery/tank/tank/2" },
{ "predicate": { "tconstruct:amount": 0.3125 }, "model": "tconstruct:block/smeltery/tank/tank/3" },
{ "predicate": { "tconstruct:amount": 0.4375 }, "model": "tconstruct:block/smeltery/tank/tank/4" },
{ "predicate": { "tconstruct:amount": 0.5625 }, "model": "tconstruct:block/smeltery/tank/tank/5" },
{ "predicate": { "tconstruct:amount": 0.6875 }, "model": "tconstruct:block/smeltery/tank/tank/6" },
{ "predicate": { "tconstruct:amount": 0.8125 }, "model": "tconstruct:block/smeltery/tank/tank/7" },
{ "predicate": { "tconstruct:amount": 0.9375 }, "model": "tconstruct:block/smeltery/tank/tank/8" }
]
}
{
"parent": "block/block",
"textures": {
"top": "tconstruct:block/smeltery/tank/seared_tank_top",
"side": "tconstruct:block/smeltery/tank/seared_tank_side",
"fluid": "minecraft:block/water_still"
},
"elements": [
{ "from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "texture": "#top" },
"up": { "texture": "#top" },
"north": { "texture": "#side" },
"south": { "texture": "#side" },
"west": { "texture": "#side" },
"east": { "texture": "#side" }
}
},
{ "from": [ 3, 16, 3 ],
"to": [ 13, 17, 13 ],
"faces": {
"up": { "texture": "#top" },
"north": {
"uv": [ 0, 0, 10, 1 ],
"texture": "#side"
},
"south": {
"uv": [ 0, 0, 10, 1 ],
"texture": "#side"
},
"west": {
"uv": [ 0, 0, 10, 1 ],
"texture": "#side"
},
"east": {
"uv": [ 0, 0, 10, 1 ],
"texture": "#side"
}
}
},
{ "from": [ 0.08, 0.08, 0.08 ],
"to": [ 15.92, 0.08, 15.92 ],
"faces": {
"down": { "texture": "#fluid", "tintindex": 0 },
"up": { "texture": "#fluid", "tintindex": 0 }
}
}
]
}
package slimeknights.tconstruct.smeltery.item;
import net.minecraft.block.Block;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.IItemPropertyGetter;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fluids.FluidStack;
import slimeknights.tconstruct.smeltery.tileentity.TankTileEntity;
import javax.annotation.Nullable;
public class TankItem extends BlockItem {
public TankItem(Block blockIn, Properties builder) {
super(blockIn, builder);
this.addPropertyOverride(new ResourceLocation("tconstruct:amount"), TankCapacityGetter.INSTANCE);
}
public enum TankCapacityGetter implements IItemPropertyGetter {
INSTANCE;
@OnlyIn(Dist.CLIENT)
@Override
public float call(ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entity) {
if (!stack.hasTag()) {
return 0;
}
FluidStack fluid = FluidStack.loadFluidStackFromNBT(stack.getTag());
if (fluid != null && fluid.getAmount() > 0) {
return (float)fluid.getAmount() / TankTileEntity.CAPACITY;
}
return 0;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment