-
Notifications
You must be signed in to change notification settings - Fork 152
Expand file tree
/
Copy pathMachineItemBlock.java
More file actions
99 lines (86 loc) · 4.35 KB
/
MachineItemBlock.java
File metadata and controls
99 lines (86 loc) · 4.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package gregtech.api.block.machines;
import gregtech.api.GTValues;
import gregtech.api.GregTechAPI;
import gregtech.api.metatileentity.ITieredMetaTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.util.LocalisationUtils;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
public class MachineItemBlock extends ItemBlock {
public MachineItemBlock(BlockMachine block) {
super(block);
setHasSubtypes(true);
}
public static MetaTileEntity getMetaTileEntity(ItemStack itemStack) {
return GregTechAPI.META_TILE_ENTITY_REGISTRY.getObjectById(itemStack.getItemDamage());
}
@Override
public String getTranslationKey(ItemStack stack) {
MetaTileEntity metaTileEntity = getMetaTileEntity(stack);
return metaTileEntity == null ? "unnamed" : metaTileEntity.getMetaName();
}
@Override
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) {
MetaTileEntity metaTileEntity = getMetaTileEntity(stack);
//prevent rendering glitch before meta tile entity sync to client, but after block placement
//set opaque property on the placing on block, instead during set of meta tile entity
return super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ,
newState.withProperty(BlockMachine.OPAQUE, metaTileEntity != null && metaTileEntity.isOpaqueCube()));
}
@Nullable
@Override
public String getCreatorModId(ItemStack itemStack) {
MetaTileEntity metaTileEntity = getMetaTileEntity(itemStack);
if (metaTileEntity == null) {
return GTValues.MODID;
}
ResourceLocation metaTileEntityId = metaTileEntity.metaTileEntityId;
return metaTileEntityId.getNamespace();
}
@Nullable
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) {
MetaTileEntity metaTileEntity = getMetaTileEntity(stack);
return metaTileEntity == null ? null : metaTileEntity.initItemStackCapabilities(stack);
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
MetaTileEntity metaTileEntity = getMetaTileEntity(stack);
if (metaTileEntity == null) return;
//item specific tooltip like: gregtech.machine.lathe.lv.tooltip
String tooltipLocale = metaTileEntity.getMetaName() + ".tooltip";
if (LocalisationUtils.hasKey(tooltipLocale)) {
String[] lines = LocalisationUtils.format(tooltipLocale).split("/n");
tooltip.addAll(Arrays.asList(lines));
}
//tier less tooltip for a electric machine like: gregtech.machine.lathe.tooltip
if (metaTileEntity instanceof ITieredMetaTileEntity) {
String tierlessTooltipLocale = ((ITieredMetaTileEntity) metaTileEntity).getTierlessTooltipKey();
//only add tierless tooltip if it's key is not equal to normal tooltip key (i.e if machine name has dot in it's name)
//case when it's not true would be any machine extending from TieredMetaTileEntity but having only one tier
if (!tooltipLocale.equals(tierlessTooltipLocale) && LocalisationUtils.hasKey(tierlessTooltipLocale)) {
String[] lines = LocalisationUtils.format(tierlessTooltipLocale).split("/n");
tooltip.addAll(Arrays.asList(lines));
}
}
metaTileEntity.addInformation(stack, worldIn, tooltip, flagIn.isAdvanced());
if (flagIn.isAdvanced()) {
tooltip.add(String.format("MetaTileEntity Id: %s", metaTileEntity.metaTileEntityId.toString()));
}
}
}