Skip to content

Instantly share code, notes, and snippets.

@Lanse505
Created March 9, 2020 16:52
Show Gist options
  • Save Lanse505/5e963414950dabe8f835d909a5aa9273 to your computer and use it in GitHub Desktop.
Save Lanse505/5e963414950dabe8f835d909a5aa9273 to your computer and use it in GitHub Desktop.
package com.teamacronymcoders.essence.blocks;
import com.hrznstudio.titanium.block.BasicBlock;
import com.hrznstudio.titanium.recipe.generator.TitaniumLootTableProvider;
import com.teamacronymcoders.essence.Essence;
import com.teamacronymcoders.essence.utils.EssenceObjectHolders;
import com.teamacronymcoders.essence.utils.helpers.EssenceColorHelper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.DyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.common.util.Constants;
import javax.annotation.Nonnull;
import java.util.*;
public class EssenceBrickBlock extends BasicBlock {
private static Map<DyeColor, EssenceBrickBlock> dyeToColorMap = new HashMap<>();
public final DyeColor color;
static {
dyeToColorMap.put(DyeColor.WHITE, EssenceObjectHolders.ESSENCE_BRICKS_WHITE);
dyeToColorMap.put(DyeColor.ORANGE, EssenceObjectHolders.ESSENCE_BRICKS_ORANGE);
dyeToColorMap.put(DyeColor.MAGENTA, EssenceObjectHolders.ESSENCE_BRICKS_MAGENTA);
dyeToColorMap.put(DyeColor.LIGHT_BLUE, EssenceObjectHolders.ESSENCE_BRICKS_LIGHT_BLUE);
dyeToColorMap.put(DyeColor.YELLOW, EssenceObjectHolders.ESSENCE_BRICKS_YELLOW);
dyeToColorMap.put(DyeColor.LIME, EssenceObjectHolders.ESSENCE_BRICKS_LIME);
dyeToColorMap.put(DyeColor.PINK, EssenceObjectHolders.ESSENCE_BRICKS_PINK);
dyeToColorMap.put(DyeColor.GRAY, EssenceObjectHolders.ESSENCE_BRICKS_GRAY);
dyeToColorMap.put(DyeColor.LIGHT_GRAY, EssenceObjectHolders.ESSENCE_BRICKS_LIGHT_GRAY);
dyeToColorMap.put(DyeColor.CYAN, EssenceObjectHolders.ESSENCE_BRICKS_CYAN);
dyeToColorMap.put(DyeColor.PURPLE, EssenceObjectHolders.ESSENCE_BRICKS_PURPLE);
dyeToColorMap.put(DyeColor.BLUE, EssenceObjectHolders.ESSENCE_BRICKS_BLUE);
dyeToColorMap.put(DyeColor.BROWN, EssenceObjectHolders.ESSENCE_BRICKS_BROWN);
dyeToColorMap.put(DyeColor.GREEN, EssenceObjectHolders.ESSENCE_BRICKS_GREEN);
dyeToColorMap.put(DyeColor.RED, EssenceObjectHolders.ESSENCE_BRICKS_RED);
dyeToColorMap.put(DyeColor.BLACK, EssenceObjectHolders.ESSENCE_BRICKS_BLACK);
}
public EssenceBrickBlock(ResourceLocation resourceLocation, DyeColor color) {
super(Block.Properties.create(Material.ROCK).harvestLevel(1).harvestTool(ToolType.PICKAXE).hardnessAndResistance(1.5F, 1200F));
setRegistryName(resourceLocation + "_" + color.getTranslationKey());
this.color = color;
}
@SuppressWarnings("deprecation")
@Override
public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult result) {
if (worldIn.isRemote) {
return ActionResultType.PASS;
}
ItemStack stack = player.getHeldItem(handIn);
Set<ResourceLocation> tags = stack.getItem().getTags();
List<DyeColor> colors = new ArrayList<>();
tags.stream().filter(tag -> !colors.contains(EssenceColorHelper.getColorByTag(new ItemTags.Wrapper(tag))))
.forEach(tag -> colors.add(EssenceColorHelper.getColorByTag(new ItemTags.Wrapper(tag))));
EssenceBrickBlock newBlock = getBlockByColor(state, colors.stream().skip(Essence.RANDOM.nextInt(colors.size())).findFirst().orElse(null));
if (!state.equals(newBlock.getDefaultState())) {
worldIn.setBlockState(pos, newBlock.getDefaultState());
worldIn.notifyBlockUpdate(pos, state, newBlock.getDefaultState(), Constants.BlockFlags.NOTIFY_NEIGHBORS);
}
return ActionResultType.PASS;
}
public static EssenceBrickBlock getBlockByColor(BlockState state, DyeColor color) {
if (color == null) {
EssenceBrickBlock block = (EssenceBrickBlock) state.getBlock();
return dyeToColorMap.get(block.getColor());
}
return dyeToColorMap.get(color);
}
@Override
public MaterialColor getMaterialColor(BlockState state, IBlockReader worldIn, BlockPos pos) {
return color.getMapColor();
}
@Override
public void createLootTable(@Nonnull TitaniumLootTableProvider provider) {
super.createLootTable(provider);
}
public DyeColor getColor() {
return this.color;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment