Skip to content

Commit

Permalink
paintbrush
Browse files Browse the repository at this point in the history
  • Loading branch information
DaFuqs committed Aug 9, 2022
1 parent 03a9b5b commit f4ee6da
Show file tree
Hide file tree
Showing 28 changed files with 167 additions and 30 deletions.
29 changes: 29 additions & 0 deletions src/main/java/de/dafuqs/spectrum/blocks/PaintbrushTriggered.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package de.dafuqs.spectrum.blocks;

import de.dafuqs.spectrum.items.magic_items.PaintBrushItem;
import de.dafuqs.spectrum.registries.SpectrumSoundEvents;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public interface PaintbrushTriggered {

default ActionResult checkAndDoPaintbrushTrigger(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
if(player.getStackInHand(hand).getItem() instanceof PaintBrushItem) {
ActionResult actionResult = onPaintBrushTrigger(state, world, pos, player, hand, hit);
if(actionResult.isAccepted()) {
world.playSound(null, pos, SpectrumSoundEvents.ENCHANTER_DING, SoundCategory.PLAYERS, 1.0F, 1.0F);
}
return actionResult;
}
return ActionResult.PASS;
}

ActionResult onPaintBrushTrigger(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit);

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public interface RedstonePoweredBlock {

BooleanProperty POWERED = BooleanProperty.of("powered");

public default boolean checkGettingPowered(World world, BlockPos pos) {
default boolean checkGettingPowered(World world, BlockPos pos) {
Direction[] var4 = Direction.values();
int var5 = var4.length;

Expand Down Expand Up @@ -38,11 +38,11 @@ public default boolean checkGettingPowered(World world, BlockPos pos) {
}
}

public default void power(World world, BlockPos pos) {
default void power(World world, BlockPos pos) {
world.setBlockState(pos, world.getBlockState(pos).with(POWERED, true));
}

public default void unPower(World world, BlockPos pos) {
default void unPower(World world, BlockPos pos) {
world.setBlockState(pos, world.getBlockState(pos).with(POWERED, false));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,9 @@
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.EnumProperty;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.ItemScatterer;
import net.minecraft.util.StringIdentifiable;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
Expand All @@ -30,8 +27,6 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Locale;

public class CrystallarieumBlock extends BlockWithEntity {

public CrystallarieumBlock(Settings settings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,9 @@
import de.dafuqs.spectrum.particle.SpectrumParticleTypes;
import de.dafuqs.spectrum.recipe.crystallarieum.CrystallarieumCatalyst;
import de.dafuqs.spectrum.recipe.crystallarieum.CrystallarieumRecipe;
import de.dafuqs.spectrum.recipe.enchanter.EnchanterRecipe;
import de.dafuqs.spectrum.recipe.enchantment_upgrade.EnchantmentUpgradeRecipe;
import de.dafuqs.spectrum.registries.SpectrumBlockEntities;
import de.dafuqs.spectrum.registries.SpectrumBlockTags;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.LootableContainerBlockEntity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import net.minecraft.block.*;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.fluid.Fluids;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package de.dafuqs.spectrum.blocks.pedestal;

import de.dafuqs.spectrum.SpectrumCommon;
import de.dafuqs.spectrum.blocks.PaintbrushTriggered;
import de.dafuqs.spectrum.blocks.RedstonePoweredBlock;
import de.dafuqs.spectrum.enums.PedestalRecipeTier;
import de.dafuqs.spectrum.particle.SpectrumParticleTypes;
import de.dafuqs.spectrum.recipe.GatedRecipe;
import de.dafuqs.spectrum.registries.SpectrumBlockEntities;
import de.dafuqs.spectrum.registries.SpectrumMultiblocks;
import net.fabricmc.api.EnvType;
Expand Down Expand Up @@ -42,7 +44,7 @@

import java.util.Random;

public class PedestalBlock extends BlockWithEntity implements RedstonePoweredBlock {
public class PedestalBlock extends BlockWithEntity implements RedstonePoweredBlock, PaintbrushTriggered {

public static final Identifier UNLOCK_IDENTIFIER = new Identifier(SpectrumCommon.MOD_ID, "place_pedestal");
public static final BooleanProperty POWERED = BooleanProperty.of("powered");
Expand Down Expand Up @@ -169,6 +171,11 @@ protected void appendProperties(StateManager.Builder<Block, BlockState> stateMan
}

public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
ActionResult actionResult = checkAndDoPaintbrushTrigger(state, world, pos, player, hand, hit);
if(actionResult.isAccepted()) {
return actionResult;
}

if (world.isClient) {
return ActionResult.SUCCESS;
} else {
Expand Down Expand Up @@ -289,4 +296,25 @@ public PedestalVariant getVariant() {
SHAPE = VoxelShapes.union(foot, head);
}

@Override
public ActionResult onPaintBrushTrigger(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
BlockEntity blockEntity = world.getBlockEntity(pos);
if(blockEntity instanceof PedestalBlockEntity pedestalBlockEntity) {
if(pedestalBlockEntity.craftingTime > 0) {
return ActionResult.FAIL;
}
if(pedestalBlockEntity.currentRecipe == null) {
return ActionResult.FAIL;
}
if(pedestalBlockEntity.currentRecipe instanceof GatedRecipe gatedRecipe && !gatedRecipe.canPlayerCraft(player)) {
return ActionResult.FAIL;
}

pedestalBlockEntity.shouldCraft = true;

return world.isClient ? ActionResult.SUCCESS : ActionResult.CONSUME;
}
return ActionResult.FAIL;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ public class PedestalBlockEntity extends LockableContainerBlockEntity implements
protected UUID ownerUUID;
protected PedestalVariant pedestalVariant;
protected DefaultedList<ItemStack> inventory;
protected boolean wasPoweredBefore;
protected boolean shouldCraft;
protected float storedXP;
protected int craftingTime;
protected int craftingTimeTotal;
protected Recipe currentRecipe;
protected @Nullable Recipe currentRecipe;
protected PedestalRecipeTier cachedMaxPedestalTier;
protected long cachedMaxPedestalTierTick;
protected Map<UpgradeType, Float> upgrades;
Expand Down Expand Up @@ -154,6 +154,7 @@ public static void serverTick(@NotNull World world, BlockPos blockPos, BlockStat
Recipe calculatedRecipe = calculateRecipe(world, pedestalBlockEntity);
pedestalBlockEntity.inventoryChanged = false;
if (pedestalBlockEntity.currentRecipe != calculatedRecipe) {
pedestalBlockEntity.shouldCraft = false;
pedestalBlockEntity.currentRecipe = calculatedRecipe;
pedestalBlockEntity.craftingTime = 0;
if (calculatedRecipe instanceof PedestalCraftingRecipe calculatedPedestalCraftingRecipe) {
Expand All @@ -167,7 +168,7 @@ public static void serverTick(@NotNull World world, BlockPos blockPos, BlockStat
}

// only craft when there is redstone power
if (pedestalBlockEntity.craftingTime == 0 && !(blockState.getBlock() instanceof PedestalBlock && blockState.get(PedestalBlock.POWERED))) {
if (pedestalBlockEntity.craftingTime == 0 && !pedestalBlockEntity.shouldCraft && !(blockState.getBlock() instanceof PedestalBlock && blockState.get(PedestalBlock.POWERED))) {
return;
}

Expand Down Expand Up @@ -197,7 +198,7 @@ public static void serverTick(@NotNull World world, BlockPos blockPos, BlockStat
}
}

if ((!pedestalBlockEntity.wasPoweredBefore && pedestalBlockEntity.craftingTime > 0) || (pedestalBlockEntity.craftingTime == 1 && pedestalBlockEntity.craftingTimeTotal > 1)) {
if (pedestalBlockEntity.craftingTime == 1 && pedestalBlockEntity.craftingTimeTotal > 1) {
SpectrumS2CPacketSender.sendPlayBlockBoundSoundInstance(SpectrumSoundEvents.PEDESTAL_CRAFTING, (ServerWorld) pedestalBlockEntity.world, pedestalBlockEntity.getPos(), pedestalBlockEntity.craftingTimeTotal - pedestalBlockEntity.craftingTime);
}

Expand Down Expand Up @@ -231,7 +232,6 @@ public static void serverTick(@NotNull World world, BlockPos blockPos, BlockStat
if (shouldMarkDirty) {
markDirty(world, blockPos, blockState);
}
pedestalBlockEntity.wasPoweredBefore = true;
}

@Contract(pure = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
import me.shedaniel.rei.api.common.entry.EntryIngredient;
import me.shedaniel.rei.api.common.util.EntryIngredients;
import me.shedaniel.rei.api.common.util.EntryStacks;
import net.minecraft.block.BlockState;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.fluid.Fluids;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack;
import net.minecraft.recipe.Ingredient;
import net.minecraft.text.LiteralText;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.NotNull;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import net.minecraft.block.Blocks;
import net.minecraft.structure.rule.RuleTest;
import net.minecraft.structure.rule.TagMatchRuleTest;
import net.minecraft.tag.BlockTags;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.intprovider.UniformIntProvider;
import net.minecraft.util.registry.BuiltinRegistries;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package de.dafuqs.spectrum.items.magic_items;

import de.dafuqs.spectrum.energy.color.InkColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;

import java.util.Optional;

public class PaintBrushItem extends Item {

public static final String COLOR_NBT_STRING = "Color";

public PaintBrushItem(Settings settings) {
super(settings);
}

static void setColor(ItemStack stack, InkColor color) {
NbtCompound compound = stack.getOrCreateNbt();
compound.putString(COLOR_NBT_STRING, color.toString());
stack.setNbt(compound);
}

static Optional<InkColor> getColor(ItemStack stack) {
NbtCompound compound = stack.getNbt();
if (compound != null && compound.contains(COLOR_NBT_STRING)) {
return Optional.of(InkColor.of(compound.getString(COLOR_NBT_STRING)));
}
return Optional.empty();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Hand;
import net.minecraft.util.Pair;
import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.math.BlockPos;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -488,8 +488,7 @@ public class SpectrumBlocks {
public static final Block ENDER_DROPPER = new EnderDropperBlock(FabricBlockSettings.copyOf(Blocks.DROPPER).requiresTool().strength(15F, 60.0F));
public static final Block ENDER_HOPPER = new EnderHopperBlock(FabricBlockSettings.copyOf(Blocks.HOPPER).requiresTool().strength(15F, 60.0F));

private static final FabricBlockSettings spiritSallowLeavesBlockSettings = FabricBlockSettings.copyOf(Blocks.OAK_LEAVES).luminance((state) -> 8);
public static final Block SPIRIT_SALLOW_LEAVES = new SpiritSallowLeavesBlock(spiritSallowLeavesBlockSettings);
public static final Block SPIRIT_SALLOW_LEAVES = new SpiritSallowLeavesBlock(FabricBlockSettings.copyOf(Blocks.OAK_LEAVES).luminance((state) -> 8));
public static final Block SPIRIT_SALLOW_LOG = new PillarBlock(FabricBlockSettings.copyOf(Blocks.OAK_WOOD));
public static final Block SPIRIT_SALLOW_ROOTS = new PillarBlock(FabricBlockSettings.copyOf(Blocks.OAK_WOOD));
public static final Block SPIRIT_SALLOW_HEART = new Block(FabricBlockSettings.copyOf(Blocks.OAK_WOOD).luminance(11));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import de.dafuqs.spectrum.blocks.jade_vines.JadeJellyItem;
import de.dafuqs.spectrum.entity.SpectrumEntityTypes;
import de.dafuqs.spectrum.enums.BuiltinGemstoneColor;
import de.dafuqs.spectrum.graces.crystal.ColorPool;
import de.dafuqs.spectrum.items.*;
import de.dafuqs.spectrum.items.armor.BedrockArmorItem;
import de.dafuqs.spectrum.items.armor.GemstoneArmorItem;
Expand Down Expand Up @@ -102,7 +101,8 @@ public class SpectrumItems {


// Main items
public static final Item MANUAL = new GuidebookItem(toolItemSettingsSingle);
public static final Item GUIDEBOOK = new GuidebookItem(toolItemSettingsSingle);
public static final Item PAINTBRUSH = new PaintBrushItem(toolItemSettingsSingle);
public static final Item CRAFTING_TABLET = new CraftingTabletItem(toolItemSettingsSingle);

public static final Item PEDESTAL_TIER_1_STRUCTURE_PLACER = new StructurePlacerItem(toolItemSettingsSingle, SpectrumCommon.locate("pedestal_simple_structure_place"));
Expand Down Expand Up @@ -375,7 +375,8 @@ private static void register(String name, Item item, DyeColor dyeColor) {
}

public static void register() {
register("manual", MANUAL, DyeColor.WHITE);
register("manual", GUIDEBOOK, DyeColor.WHITE);
register("paintbrush", PAINTBRUSH, DyeColor.WHITE);

registerStructurePlacers();
registerGemstoneItems();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public boolean shouldAlwaysPlay() {
@Override
public void tick() {
playtime++;
if (player == null || !player.getMainHandStack().isOf(SpectrumItems.MANUAL) || playtime > duration) {
if (player == null || !player.getMainHandStack().isOf(SpectrumItems.GUIDEBOOK) || playtime > duration) {
this.setDone();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"shimmer": {
"bloom": true
}
}
Loading

0 comments on commit f4ee6da

Please sign in to comment.