Skip to content

Commit 99ccec2

Browse files
committed
Fixed block breaking overlay, added fluid paint options, fixed harvest tools
1 parent 3487cf3 commit 99ccec2

File tree

11 files changed

+119
-45
lines changed

11 files changed

+119
-45
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"replace": false,
3+
"values": [
4+
"signpost:post_oak",
5+
"signpost:post_birch",
6+
"signpost:post_spruce",
7+
"signpost:post_jungle",
8+
"signpost:post_dark_oak",
9+
"signpost:post_acacia",
10+
"signpost:post_warped",
11+
"signpost:post_crimson"
12+
]
13+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"replace": false,
3+
"values": [
4+
"signpost:post_stone",
5+
"signpost:post_iron",
6+
"signpost:post_sandstone",
7+
"signpost:waystone_model_simple_0",
8+
"signpost:waystone_model_simple_1",
9+
"signpost:waystone_model_simple_2",
10+
"signpost:waystone_model_detailed_0",
11+
"signpost:waystone_model_detailed_1",
12+
"signpost:waystone_model_aer",
13+
"signpost:waystone_model_dwarf",
14+
"signpost:waystone_model_ygnar",
15+
"signpost:waystone"
16+
]
17+
}

src/main/java/gollorum/signpost/minecraft/block/ModelWaystone.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ private ModelWaystone(Variant variant) {
9292
super(Properties.of(Material.PISTON, MaterialColor.STONE)
9393
.strength(1.5F, 6.0F)
9494
.noOcclusion()
95-
.isViewBlocking((x, y, z) -> false));
95+
.isViewBlocking((x, y, z) -> false)
96+
.requiresCorrectToolForDrops()
97+
);
9698
this.variant = variant;
9799
this.registerDefaultState(this.defaultBlockState().setValue(Waterlogged, false).setValue(Facing, Direction.NORTH));
98100
}

src/main/java/gollorum/signpost/minecraft/block/PostBlock.java

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,6 @@ private static ResourceLocation expand(ResourceLocation loc){
212212
);
213213
}
214214

215-
// @Override
216-
// public String getSerializedName() {
217-
// return name;
218-
// }
219-
220215
public static BufferSerializable<ModelType> Serializer = new SerializerImpl();
221216
public static final class SerializerImpl implements BufferSerializable<ModelType> {
222217
@Override
@@ -255,14 +250,21 @@ public ModelType read(FriendlyByteBuf buffer) {
255250
private static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
256251

257252
public static class Variant {
253+
254+
public static enum RequiredTool {
255+
Axe, Pickaxe
256+
}
257+
258258
public final PostBlock block;
259259
public final String registryName;
260260
public final Properties properties;
261261
public final ModelType type;
262+
public final RequiredTool tool;
262263

263-
public Variant(Properties properties, ModelType type, String registryName) {
264+
public Variant(Properties properties, ModelType type, String registryName, RequiredTool tool) {
264265
this.properties = properties;
265266
this.type = type;
267+
this.tool = tool;
266268
this.block = new PostBlock(properties, type);
267269
this.registryName = REGISTRY_NAME + "_" + registryName;
268270
}
@@ -271,17 +273,17 @@ public Variant(Properties properties, ModelType type, String registryName) {
271273

272274
public static final String REGISTRY_NAME = "post";
273275

274-
public static final Variant STONE = new Variant(PropertiesUtil.STONE, ModelType.Stone, "stone");
275-
public static final Variant IRON = new Variant(PropertiesUtil.IRON, ModelType.Iron, "iron");
276-
public static final Variant OAK = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Oak), ModelType.Oak, "oak");
277-
public static final Variant DARK_OAK = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.DarkOak), ModelType.DarkOak, "dark_oak");
278-
public static final Variant SPRUCE = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Spruce), ModelType.Spruce, "spruce");
279-
public static final Variant BIRCH = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Birch), ModelType.Birch, "birch");
280-
public static final Variant JUNGLE = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Jungle), ModelType.Jungle, "jungle");
281-
public static final Variant ACACIA = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Acacia), ModelType.Acacia, "acacia");
282-
public static final Variant WARPED = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Warped), ModelType.Warped, "warped");
283-
public static final Variant CRIMSON = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Crimson), ModelType.Crimson, "crimson");
284-
public static final Variant SANDSTONE = new Variant(PropertiesUtil.STONE, ModelType.Sandstone, "sandstone");
276+
public static final Variant STONE = new Variant(PropertiesUtil.STONE, ModelType.Stone, "stone", Variant.RequiredTool.Pickaxe);
277+
public static final Variant IRON = new Variant(PropertiesUtil.IRON, ModelType.Iron, "iron", Variant.RequiredTool.Pickaxe);
278+
public static final Variant OAK = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Oak), ModelType.Oak, "oak", Variant.RequiredTool.Axe);
279+
public static final Variant DARK_OAK = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.DarkOak), ModelType.DarkOak, "dark_oak", Variant.RequiredTool.Axe);
280+
public static final Variant SPRUCE = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Spruce), ModelType.Spruce, "spruce", Variant.RequiredTool.Axe);
281+
public static final Variant BIRCH = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Birch), ModelType.Birch, "birch", Variant.RequiredTool.Axe);
282+
public static final Variant JUNGLE = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Jungle), ModelType.Jungle, "jungle", Variant.RequiredTool.Axe);
283+
public static final Variant ACACIA = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Acacia), ModelType.Acacia, "acacia", Variant.RequiredTool.Axe);
284+
public static final Variant WARPED = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Warped), ModelType.Warped, "warped", Variant.RequiredTool.Axe);
285+
public static final Variant CRIMSON = new Variant(PropertiesUtil.wood(PropertiesUtil.WoodType.Crimson), ModelType.Crimson, "crimson", Variant.RequiredTool.Axe);
286+
public static final Variant SANDSTONE = new Variant(PropertiesUtil.STONE, ModelType.Sandstone, "sandstone", Variant.RequiredTool.Pickaxe);
285287

286288
public static final List<Variant> AllVariants = Arrays.asList(OAK, BIRCH, SPRUCE, JUNGLE, DARK_OAK, ACACIA, STONE, IRON, WARPED, CRIMSON, SANDSTONE);
287289
public static final List<Block> ALL = AllVariants.stream().map(i -> i.block).collect(Collectors.toList());

src/main/java/gollorum/signpost/minecraft/block/PropertiesUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ public enum WoodType{
1212
}
1313

1414
public static Block.Properties STONE = Block.Properties.of(Material.STONE, MaterialColor.STONE)
15-
.strength(1.5F, 6.0F);
15+
.strength(1.5F, 6.0F).requiresCorrectToolForDrops();
1616

1717
public static Block.Properties IRON = Block.Properties.of(Material.METAL, MaterialColor.METAL)
18-
.strength(5.0F, 6.0F).sound(SoundType.METAL);
18+
.strength(5.0F, 6.0F).sound(SoundType.METAL).requiresCorrectToolForDrops();
1919

2020
private static Block.Properties wood(MaterialColor color){
2121
return Block.Properties.of(Material.WOOD, color)

src/main/java/gollorum/signpost/minecraft/block/WaystoneBlock.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import gollorum.signpost.WaystoneLibrary;
77
import gollorum.signpost.minecraft.block.tiles.WaystoneTile;
88
import gollorum.signpost.minecraft.gui.RequestWaystoneGui;
9-
import gollorum.signpost.minecraft.gui.utils.Colors;
109
import gollorum.signpost.minecraft.utils.LangKeys;
1110
import gollorum.signpost.minecraft.utils.TextComponents;
1211
import gollorum.signpost.minecraft.utils.TileEntityUtils;
@@ -38,13 +37,10 @@
3837
import net.minecraft.world.level.block.state.properties.DirectionProperty;
3938
import net.minecraft.world.level.material.Material;
4039
import net.minecraft.world.level.material.MaterialColor;
41-
import net.minecraft.world.level.storage.loot.LootContext;
4240
import net.minecraft.world.phys.BlockHitResult;
4341
import net.minecraftforge.fmllegacy.network.PacketDistributor;
4442

4543
import javax.annotation.Nullable;
46-
import java.util.Collections;
47-
import java.util.List;
4844
import java.util.Optional;
4945

5046
public class WaystoneBlock extends BaseEntityBlock implements WithCountRestriction {
@@ -56,7 +52,9 @@ public class WaystoneBlock extends BaseEntityBlock implements WithCountRestricti
5652

5753
private WaystoneBlock() {
5854
super(Properties.of(Material.PISTON, MaterialColor.STONE)
59-
.strength(1.5F, 6.0F));
55+
.strength(1.5F, 6.0F)
56+
.requiresCorrectToolForDrops()
57+
);
6058
}
6159

6260
public static void openGuiIfHasPermission(ServerPlayer player, WorldLocation worldLocation) {

src/main/java/gollorum/signpost/minecraft/block/tiles/PostTile.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
import net.minecraft.resources.ResourceLocation;
3333
import net.minecraft.server.level.ServerLevel;
3434
import net.minecraft.util.Tuple;
35+
import net.minecraft.world.entity.Entity;
3536
import net.minecraft.world.entity.item.ItemEntity;
36-
import net.minecraft.world.entity.player.Player;
3737
import net.minecraft.world.item.Item;
3838
import net.minecraft.world.item.ItemStack;
3939
import net.minecraft.world.level.block.Block;
@@ -152,7 +152,7 @@ public AABB getRenderBoundingBox() {
152152
: shape.bounds().move(getBlockPos());
153153
}
154154

155-
public Optional<TraceResult> trace(Player player){
155+
public Optional<TraceResult> trace(Entity player){
156156
Vec3 head = player.position();
157157
head = head.add(0, player.getEyeHeight(), 0);
158158
if (player.isCrouching())

src/main/java/gollorum/signpost/minecraft/data/PostTag.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package gollorum.signpost.minecraft.data;
22

33
import gollorum.signpost.Signpost;
4+
import gollorum.signpost.minecraft.block.ModelWaystone;
45
import gollorum.signpost.minecraft.block.PostBlock;
6+
import gollorum.signpost.minecraft.block.WaystoneBlock;
57
import net.minecraft.data.DataGenerator;
68
import net.minecraft.data.tags.BlockTagsProvider;
79
import net.minecraft.data.tags.ItemTagsProvider;
@@ -40,6 +42,14 @@ public Blocks(DataGenerator generatorIn, ExistingFileHelper fileHelper) {
4042
protected void addTags() {
4143
this.tag(Tag)
4244
.add(PostBlock.AllVariants.stream().map(i -> i.block).toArray(Block[]::new));
45+
this.tag(BlockTags.MINEABLE_WITH_AXE).add(PostBlock.AllVariants.stream()
46+
.filter(v -> v.tool == PostBlock.Variant.RequiredTool.Axe)
47+
.map(i -> i.block).toArray(Block[]::new));
48+
this.tag(BlockTags.MINEABLE_WITH_PICKAXE).add(PostBlock.AllVariants.stream()
49+
.filter(v -> v.tool == PostBlock.Variant.RequiredTool.Pickaxe)
50+
.map(i -> i.block).toArray(Block[]::new))
51+
.add(ModelWaystone.variants.stream().map(i -> i.block).toArray(Block[]::new))
52+
.add(WaystoneBlock.INSTANCE);;
4353
}
4454

4555
}

src/main/java/gollorum/signpost/minecraft/gui/PaintBlockPartGui.java

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import net.minecraft.resources.ResourceLocation;
2424
import net.minecraft.world.inventory.InventoryMenu;
2525
import net.minecraft.world.item.BlockItem;
26+
import net.minecraft.world.item.BucketItem;
27+
import net.minecraft.world.item.Item;
2628
import net.minecraft.world.item.ItemStack;
2729
import net.minecraft.world.level.block.Block;
2830
import net.minecraft.world.level.block.state.BlockState;
@@ -63,14 +65,14 @@ protected void init() {
6365
super.init();
6466

6567
List<Tuple<List<TextureAtlasSprite>, ItemStack>> blocksToRender = getMinecraft().player.getInventory().items.stream()
66-
.filter(i -> !i.isEmpty() && i.getItem() instanceof BlockItem)
68+
.filter(i -> !i.isEmpty() && (i.getItem() instanceof BlockItem || i.getItem() instanceof BucketItem))
6769
.map(i -> {
6870
ItemStack ret = i.copy();
6971
ret.setCount(1);
7072
return ret;
7173
})
7274
.distinct()
73-
.map(is -> Tuple.of(allSpritesFor((BlockItem) is.getItem(), is), is))
75+
.map(is -> Tuple.of(allSpritesFor(is), is))
7476
.filter(p -> p._1.size() > 0)
7577
.collect(Collectors.toList());
7678

@@ -104,20 +106,35 @@ protected void init() {
104106

105107
private static final Direction[] faces = new Direction[]{null, Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.UP, Direction.DOWN};
106108

109+
private List<TextureAtlasSprite> allSpritesFor(ItemStack stack) {
110+
Item item = stack.getItem();
111+
if(item instanceof BlockItem) return allSpritesFor((BlockItem) item, stack);
112+
else if(item instanceof BucketItem) return allSpritesFor((BucketItem) item);
113+
else throw new RuntimeException("Item type of " + item.getClass() + " not supported");
114+
}
115+
107116
private List<TextureAtlasSprite> allSpritesFor(BlockItem item, ItemStack stack) {
108-
Block block = ((BlockItem) item.asItem()).getBlock();
109-
Stream<TextureAtlasSprite> stream;
110-
if(block instanceof PostBlock && stack.hasTag() && stack.getTag().contains("Parts")) {
111-
stream = PostTile.readPartInstances(stack.getTag().getCompound("Parts"))
112-
.stream().flatMap(i -> ((Collection<ResourceLocation>) i.blockPart.getAllTextures()).stream().map(this::spriteFrom));
113-
} else {
114-
BlockState state = block.defaultBlockState();
115-
BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(state);
116-
stream = Arrays.stream(faces)
117-
.flatMap(side -> model.getQuads(null, side, font.random).stream())
118-
.map(BakedQuad::getSprite);
119-
}
120-
return stream
117+
Block block = item.getBlock();
118+
return block instanceof PostBlock && stack.hasTag() && stack.getTag().contains("Parts")
119+
? PostTile.readPartInstances(stack.getTag().getCompound("Parts"))
120+
.stream().flatMap(i -> ((Collection<ResourceLocation>) i.blockPart.getAllTextures())
121+
.stream().map(this::spriteFrom)
122+
).collect(Collectors.toList())
123+
: allSpritesFor(block.defaultBlockState());
124+
}
125+
126+
private List<TextureAtlasSprite> allSpritesFor(BucketItem item) {
127+
return item.getFluid().getAttributes()
128+
.getTextures()
129+
.map(this::spriteFrom)
130+
.collect(Collectors.toList());
131+
}
132+
133+
private List<TextureAtlasSprite> allSpritesFor(BlockState state) {
134+
BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(state);
135+
return Arrays.stream(faces)
136+
.flatMap(side -> model.getQuads(null, side, font.random).stream())
137+
.map(BakedQuad::getSprite)
121138
.distinct()
122139
.collect(Collectors.toList());
123140
}

src/main/java/gollorum/signpost/minecraft/rendering/PostRenderer.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package gollorum.signpost.minecraft.rendering;
22

33
import com.mojang.blaze3d.vertex.PoseStack;
4+
import gollorum.signpost.blockpartdata.types.PostBlockPart;
45
import gollorum.signpost.blockpartdata.types.renderers.BlockPartRenderer;
56
import gollorum.signpost.minecraft.block.tiles.PostTile;
67
import gollorum.signpost.utils.BlockPartInstance;
8+
import net.minecraft.client.Minecraft;
79
import net.minecraft.client.renderer.MultiBufferSource;
810
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
911
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
1012
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
13+
import net.minecraft.server.level.BlockDestructionProgress;
1114

12-
import java.util.Random;
15+
import java.util.*;
16+
import java.util.stream.Collectors;
1317

1418
public class PostRenderer implements BlockEntityRenderer<PostTile> {
1519

@@ -29,6 +33,15 @@ public void render(
2933
Random random = new Random();
3034
long rand = tile.hashCode();
3135
random.setSeed(rand);
36+
SortedSet<BlockDestructionProgress> destructionProgresses = Minecraft.getInstance().levelRenderer.destructionProgress.get(tile.getBlockPos().asLong());
37+
Set<BlockPartInstance> partsBeingBroken = destructionProgresses == null ? null : destructionProgresses.stream()
38+
.map(progress -> Optional.ofNullable(tile.getLevel().getEntity(progress.getId()))
39+
.flatMap(tile::trace)
40+
.map(res -> res.part))
41+
.filter(Optional::isPresent)
42+
.map(Optional::get)
43+
.collect(Collectors.toSet());
44+
boolean shouldUseOriginalBuffer = partsBeingBroken == null || partsBeingBroken.isEmpty() || partsBeingBroken.stream().anyMatch(i -> i.blockPart instanceof PostBlockPart);
3245
RenderingUtil.wrapInMatrixEntry(matrixStack, () -> {
3346
matrixStack.translate(0.5, 0, 0.5);
3447
for (BlockPartInstance now: tile.getParts()) {
@@ -39,7 +52,7 @@ public void render(
3952
tile,
4053
renderer,
4154
matrixStack,
42-
buffer,
55+
shouldUseOriginalBuffer || partsBeingBroken.contains(now) ? buffer : Minecraft.getInstance().renderBuffers().bufferSource(),
4356
combinedLight,
4457
combinedOverlay,
4558
random,

0 commit comments

Comments
 (0)