/
FirestarterBlock.java
136 lines (109 loc) · 5.11 KB
/
FirestarterBlock.java
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package slimeknights.tmechworks.common.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.state.BooleanProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.common.util.Constants;
import slimeknights.tmechworks.common.blocks.tileentity.FirestarterTileEntity;
import slimeknights.tmechworks.common.items.MechworksBlockItem;
import slimeknights.tmechworks.library.Util;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
public class FirestarterBlock extends RedstoneMachineBlock implements IBlockItemConstruct
{
public static final BooleanProperty EXTINGUISH = BooleanProperty.create("extinguish");
public FirestarterBlock()
{
super(Material.IRON);
setDefaultState(getDefaultState().with(EXTINGUISH, true));
}
@Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
super.fillStateContainer(builder);
builder.add(EXTINGUISH);
}
@Override
public void fillItemGroup(ItemGroup group, NonNullList<ItemStack> items) {
ItemStack extinguishStack = new ItemStack(this, 1);
ItemStack keepLitStack = new ItemStack(this, 1);
CompoundNBT extinguish = extinguishStack.getOrCreateTag();
extinguish.putBoolean("extinguish", true);
CompoundNBT keepLit = keepLitStack.getOrCreateTag();
keepLit.putBoolean("extinguish", false);
items.add(extinguishStack);
items.add(keepLitStack);
}
@Override
public void writeAdditionalItemData(BlockState state, World worldIn, BlockPos pos, ItemStack stack) {
super.writeAdditionalItemData(state, worldIn, pos, stack);
CompoundNBT tags = stack.getOrCreateTag();
tags.putBoolean("extinguish", state.get(EXTINGUISH));
}
@Nonnull
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new FirestarterTileEntity();
}
@Nullable
@Override
public BlockState getStateForPlacement(BlockItemUseContext context) {
boolean shouldExtinguish = true;
ItemStack stack = context.getItem();
if(stack.hasTag() && stack.getTag().contains("extinguish", Constants.NBT.TAG_BYTE))
shouldExtinguish = stack.getTag().getBoolean("extinguish");
return super.getStateForPlacement(context).with(EXTINGUISH, shouldExtinguish);
}
@Override
public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if(player.isSneaking())
return super.onBlockActivated(state, worldIn, pos, player, handIn, hit);
state = state.cycle(EXTINGUISH);
worldIn.setBlockState(pos, state);
worldIn.playSound(player, pos, SoundEvents.BLOCK_COMPARATOR_CLICK, SoundCategory.BLOCKS, 0.3F, 0.55F);
return true;
}
@OnlyIn(Dist.CLIENT)
@Override
public void addInformation(ItemStack stack, @Nullable IBlockReader worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
super.addInformation(stack, worldIn, tooltip, flagIn);
boolean shouldExtinguish = true;
if(stack.hasTag() && stack.getTag().contains("extinguish", Constants.NBT.TAG_BYTE))
shouldExtinguish = stack.getTag().getBoolean("extinguish");
tooltip.add(new TranslationTextComponent(Util.prefix("hud.behaviour")).appendText(": ").appendSibling(new TranslationTextComponent(Util.prefix("hud.behaviour.firestarter." + (shouldExtinguish ? "extinguish" : "keep")))).applyTextStyle(TextFormatting.GRAY));
}
@Override
public void setDefaultNBT(CompoundNBT nbt, CompoundNBT blockState) {
// Firestarter does not have an inventory
// super.setDefaultNBT(nbt, blockState);
if(!nbt.contains("extinguish"))
nbt.putBoolean("extinguish", true);
}
@Override
public void onBlockItemConstruct(MechworksBlockItem item) {
item.addPropertyOverride(new ResourceLocation("extinguish"), (stack, world, entity) -> {
boolean shouldExtinguish = true;
if(stack.hasTag() && stack.getTag().contains("extinguish", Constants.NBT.TAG_BYTE))
shouldExtinguish = stack.getTag().getBoolean("extinguish");
return shouldExtinguish ? 1F : 0F;
});
}
}