Skip to content
3 changes: 2 additions & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ dependencies {
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:ServerUtilities:2.2.6:dev") // (/nbtedit)
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:worldedit-gtnh:v0.0.8:dev")
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:waila:1.9.15:dev")

// For testing glove
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:Translocators:1.4.0:dev")
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:Translocators:1.4.3:dev")
// runtimeOnlyNonPublishable("com.github.GTNewHorizons:Backhand:1.8.2:dev")

// For testing trowel + wand
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockDrum;
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEnderLotus;
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockEtherealGlass;
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockFilingCabinet;
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockFloating;
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockGigaTorch;
import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockInverted;
Expand Down Expand Up @@ -57,6 +58,7 @@
import com.fouristhenumber.utilitiesinexcess.config.blocks.BlockConfig;
import com.fouristhenumber.utilitiesinexcess.config.blocks.CursedEarthConfig;
import com.fouristhenumber.utilitiesinexcess.config.blocks.EnderLotusConfig;
import com.fouristhenumber.utilitiesinexcess.config.blocks.FilingCabinetsConfig;
import com.fouristhenumber.utilitiesinexcess.config.blocks.GeneratorConfig;
import com.fouristhenumber.utilitiesinexcess.config.dimensions.EndOfTimeConfig;
import com.fouristhenumber.utilitiesinexcess.config.dimensions.UnderWorldConfig;
Expand Down Expand Up @@ -157,6 +159,7 @@ public enum ModBlocks {
DECORATIVE_GLASS(BlockConfig.enableDecorativeGlass, new BlockDecorativeGlass(), BlockDecorativeGlass.ItemBlockDecorativeGlass.class, "decorative_glass"),
PACIFISTS_BENCH(BlockConfig.enablePacifistsBench, new BlockPacifistsBench(), "pacifists_bench"),
SMART_PUMP(BlockConfig.enableSmartPump, new BlockSmartPump(), "smart_pump"),
FILING_CABINET(FilingCabinetsConfig.enableFilingCabinets,new BlockFilingCabinet() , BlockFilingCabinet.ItemBlockFilingCabinet.class,"filing_cabinet"),
TRADING_POST(BlockConfig.enableTradingPost, new BlockTradingPost(), "trading_post"),
DECORATIVE_BLOCKS(BlockConfig.enableDecorativeBlocks, new BlockDecorative(), BlockDecorative.ItemBlockDecorative.class, "decorative_block"),
CHANDELIER(BlockConfig.chandelier.enableChandelier, new BlockChandelier(), BlockChandelier.ItemBlockChandelier.class, "chandelier"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanEnergy;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanFluid;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.TileEntityTrashCanItem;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.TileFilingCabinetAdvanced;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.TileFilingCabinetBasic;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.TileFilingCabinetElite;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityEnderGenerator;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFoodGenerator;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.generators.TileEntityFurnaceGenerator;
Expand Down Expand Up @@ -157,6 +160,9 @@ public void init(FMLInitializationEvent event) {
GameRegistry.registerTileEntity(TileEntityPinkGenerator.class, "TileEntityPinkGeneratorUIE");
GameRegistry.registerTileEntity(TileEntityNetherStarGenerator.class, "TileEntityNetherStarGeneratorUIE");
GameRegistry.registerTileEntity(TileEntityPacifistsBench.class, "TileEntityPacifistsBenchUIE");
GameRegistry.registerTileEntity(TileFilingCabinetBasic.class, "TileFilingCabinetBasicUIE");
GameRegistry.registerTileEntity(TileFilingCabinetAdvanced.class, "TileFilingCabinetAdvancedUIE");
GameRegistry.registerTileEntity(TileFilingCabinetElite.class, "TileFilingCabinetEliteUIE");
GameRegistry.registerTileEntity(TileEntityTradingPost.class, "TileEntityTradingPostUIE");
if (OtherConfig.enableWorldConversion && !Mods.ExtraUtilities.isLoaded() && Mods.Postea.isLoaded()) {
Remappings.init();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
package com.fouristhenumber.utilitiesinexcess.common.blocks;

import static com.fouristhenumber.utilitiesinexcess.render.FacingRotation.calculateFacingRotation;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.resources.I18n;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;

import com.cleanroommc.modularui.factory.GuiFactories;
import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.TileFilingCabinetAdvanced;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.TileFilingCabinetBasic;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.TileFilingCabinetElite;
import com.fouristhenumber.utilitiesinexcess.common.tileentities.cabinet.base.TileFilingCabinetBase;
import com.fouristhenumber.utilitiesinexcess.config.blocks.FilingCabinetsConfig;
import com.fouristhenumber.utilitiesinexcess.render.FacingRotation;
import com.mojang.realmsclient.gui.ChatFormatting;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

// Adapted from Filing Cabinets by phantamanta44 (MIT License)
// Source: https://github.com/phantamanta44/filing-cabinets

public class BlockFilingCabinet extends BlockContainer {

public enum Type {

BASIC(TileFilingCabinetBasic::new, FilingCabinetsConfig.cabinetBasic.enable),
ADVANCED(TileFilingCabinetAdvanced::new, FilingCabinetsConfig.cabinetAdvanced.enable),
ELITE(TileFilingCabinetElite::new, FilingCabinetsConfig.cabinetElite.enable);

private static final Type[] VALUES = values();

public static Type getForItemMeta(int meta) {
return VALUES[meta];
}

private final Supplier<TileEntity> tileFactory;
private final boolean isEnabled;

Type(Supplier<TileEntity> tileFactory, boolean isEnabled) {
this.tileFactory = tileFactory;
this.isEnabled = isEnabled;
}

TileEntity createTileEntity() {
return tileFactory.get();
}

public String getName() {
return name().toLowerCase();
}

public int getItemMeta() {
return ordinal();
}

}

public BlockFilingCabinet() {
super(Material.iron);
this.setHardness(2F);
this.setBlockName("filing_cabinet");
}

@Override
public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> items) {
for (Type type : Type.VALUES) {
if (type.isEnabled) {
items.add(new ItemStack(this, 1, type.getItemMeta()));
}
}
}

@Override
public int damageDropped(int meta) {
return meta;
}

@Override
public int getRenderType() {
return UtilitiesInExcess.rotatableblockRenderID;
}

@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase placer, ItemStack stack) {
FacingRotation fr = calculateFacingRotation(placer);
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileFilingCabinetBase cabinet) {
cabinet.setFacing(fr.facing);
cabinet.setYaw(fr.yaw);
}
super.onBlockPlacedBy(world, x, y, z, placer, stack);

}

@Override
public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX,
float subY, float subZ) {

if (worldIn.isRemote) return true;

TileEntity te = worldIn.getTileEntity(x, y, z);
if (!(te instanceof TileFilingCabinetBase cabinet)) {
return false;
}

ItemStack held = player.getCurrentEquippedItem();

if (held != null && cabinet.installCapacityUpgrade(worldIn, player, held)) {
return true;
}

GuiFactories.tileEntity()
.open(player, x, y, z);
return true;
}

@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
dropInventory(world, x, y, z);
super.breakBlock(world, x, y, z, block, meta);
}

public static void dropInventory(World world, int x, int y, int z) {
if (world.isRemote) return;

TileEntity te = world.getTileEntity(x, y, z);
if (te == null) return;

if (te instanceof TileFilingCabinetBase inv) {
inv.dropInventory(world, x, y, z);
}
}

@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
return Type.getForItemMeta(meta)
.createTileEntity();
}

@SideOnly(Side.CLIENT)
private Map<Type, IIcon[]> icons;

@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister reg) {
icons = new HashMap<>();
for (Type type : Type.VALUES) {
String basePath = String.format("%s:filing_cabinet/%s/", UtilitiesInExcess.MODID, type.getName());
IIcon side = reg.registerIcon(basePath + "side");
IIcon front = reg.registerIcon(basePath + "front");
icons.put(type, new IIcon[] { side, front });
}
}

@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return side == 3 ? getFrontIcon(meta) : getSideIcon(meta);
}

@SideOnly(Side.CLIENT)
public IIcon getSideIcon(int meta) {
Type type = Type.getForItemMeta(meta);
return icons.get(type)[0]; // side
}

@SideOnly(Side.CLIENT)
public IIcon getFrontIcon(int meta) {
Type type = Type.getForItemMeta(meta);
return icons.get(type)[1];
}

public static class ItemBlockFilingCabinet extends ItemBlock {

public ItemBlockFilingCabinet(Block block) {
super(block);
setHasSubtypes(true);
}

@Override
public int getMetadata(int damage) {
return damage;
}

@Override
public String getUnlocalizedName(final ItemStack stack) {
return this.getUnlocalizedName() + "."
+ Type.getForItemMeta(stack.getItemDamage())
.getName();
}

@Override
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean flags) {
switch (Type.getForItemMeta(stack.getItemDamage())) {
case BASIC:
tooltip.add(ChatFormatting.GRAY + I18n.format("tile.filing_cabinet.basic.desc"));
break;
case ADVANCED:
tooltip.add(ChatFormatting.GRAY + I18n.format("tile.filing_cabinet.advanced.desc"));
break;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package com.fouristhenumber.utilitiesinexcess.common.renderers;

import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;

import org.lwjgl.opengl.GL11;

import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess;
import com.fouristhenumber.utilitiesinexcess.render.HelperAO;
import com.fouristhenumber.utilitiesinexcess.render.IRotatableTile;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;

// todo change it to use GTNHLib models instead
public class RotatableBlockRenderer implements ISimpleBlockRenderingHandler {

@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {
Tessellator tess = Tessellator.instance;
renderer.setRenderBoundsFromBlock(block);
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);

tess.startDrawingQuads();
tess.setNormal(0.0F, -1.0F, 0.0F);
renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(0, metadata));

tess.setNormal(0.0F, 1.0F, 0.0F);
renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(1, metadata));

tess.setNormal(0.0F, 0.0F, -1.0F);
renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(2, metadata));

tess.setNormal(0.0F, 0.0F, 1.0F);
renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(3, metadata));

tess.setNormal(-1.0F, 0.0F, 0.0F);
renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(4, metadata));

tess.setNormal(1.0F, 0.0F, 0.0F);
renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(5, metadata));
tess.draw();
}

@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId,
RenderBlocks renderer) {
IRotatableTile tile = (IRotatableTile) world.getTileEntity(x, y, z);
if (tile == null) return false;

int meta = world.getBlockMetadata(x, y, z);
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
IIcon icon = tile.getIconForSide(block, side, meta);
ForgeDirection rotation = tile.getRotationForSide(side, meta);
renderFace(renderer, block, x, y, z, side, icon, rotation);
}

return true;
}

private void renderFace(RenderBlocks renderer, Block block, int x, int y, int z, ForgeDirection side, IIcon icon,
ForgeDirection rotation) {
renderer.setOverrideBlockTexture(icon);
float brightness = 1.0f;
switch (side) {
case DOWN:
HelperAO.RenderYNeg(renderer, block, x, y, z, brightness, brightness, brightness, icon, rotation);
break;
case UP:
HelperAO.RenderYPos(renderer, block, x, y, z, brightness, brightness, brightness, icon, rotation);
break;
case NORTH:
HelperAO.RenderZNeg(renderer, block, x, y, z, brightness, brightness, brightness, icon);
break;
case SOUTH:
HelperAO.RenderZPos(renderer, block, x, y, z, brightness, brightness, brightness, icon);
break;
case WEST:
HelperAO.RenderXNeg(renderer, block, x, y, z, brightness, brightness, brightness, icon);
break;
case EAST:
HelperAO.RenderXPos(renderer, block, x, y, z, brightness, brightness, brightness, icon);
break;
}

renderer.clearOverrideBlockTexture();
}

@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}

@Override
public int getRenderId() {
return UtilitiesInExcess.rotatableblockRenderID;
}
}
Loading
Loading