Skip to content

Commit

Permalink
Converted TrackUndercutter's set to a tag
Browse files Browse the repository at this point in the history
  • Loading branch information
Edivad99 committed Mar 20, 2024
1 parent a7d355a commit 3595425
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 56 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// 1.20.1 2024-02-23T15:28:18.606659684 Tags for minecraft:block mod id railcraft
// 1.20.1 2024-03-20T19:13:28.349768 Tags for minecraft:block mod id railcraft
9732f1964281f5d5e6f3d067e648bb4bfc5cbafb data/forge/tags/blocks/enderman_place_on_blacklist.json
e36857f35c1bac4bde5a8450008b92cf82656216 data/forge/tags/blocks/ore_rates/dense.json
8ce5fa4b4f1c2619e124ef387b086d72f9c26f04 data/forge/tags/blocks/ore_rates/singular.json
Expand Down Expand Up @@ -45,5 +45,6 @@ cef2fe722cdf4386365bd961d925fa5aeb2e244e data/railcraft/tags/blocks/signal.json
4f443f634d9e8f3e783a576b578de32d8d9b802c data/railcraft/tags/blocks/strap_iron_track.json
3a7becb38c8d1c2314b0c3b33165fbb0a8abea1e data/railcraft/tags/blocks/strengthened_glass.json
aef9e91cc72b4b67ad79db18ed826e6241996595 data/railcraft/tags/blocks/switch_track_actuator.json
3f1a7a25bf7baceefa1e6bb43d8b280e028a0c72 data/railcraft/tags/blocks/track_undercutter_invalid_ballast.json
9f117aa7ef45206fa45743cadd173969d541e3a8 data/railcraft/tags/blocks/tunnel_bore_mineable_blocks.json
95e99dc7b62d8ff0bfb141e709584ea0c7dc59f0 data/railcraft/tags/blocks/tunnel_bore_replaceable_blocks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"values": [
"#forge:sand",
"#minecraft:sand"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public RailcraftBlockTagsProvider(PackOutput packOutput,
protected void addTags(HolderLookup.Provider provider) {
this.tag(RailcraftTags.Blocks.BALLAST)
.addTag(Tags.Blocks.GRAVEL);
this.tag(RailcraftTags.Blocks.TRACK_UNDERCUTTER_INVALID_BALLAST)
.addTags(Tags.Blocks.SAND, BlockTags.SAND);
this.tag(RailcraftTags.Blocks.SWITCH_TRACK_ACTUATOR)
.add(RailcraftBlocks.SWITCH_TRACK_LEVER.get())
.add(RailcraftBlocks.SWITCH_TRACK_MOTOR.get())
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/mods/railcraft/tags/RailcraftTags.java
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,8 @@ public static TagKey<Item> storageBlocksTag(String name) {
public static class Blocks {

public static final TagKey<Block> BALLAST = tag("ballast");
public static final TagKey<Block> TRACK_UNDERCUTTER_INVALID_BALLAST =
tag("track_undercutter_invalid_ballast");
public static final TagKey<Block> SWITCH_TRACK_ACTUATOR = tag("switch_track_actuator");
public static final TagKey<Block> ASPECT_RECEIVER = tag("aspect_receiver");
public static final TagKey<Block> ASPECT_EMITTER = tag("aspect_emitter");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import net.minecraft.world.Containers;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level;
Expand Down Expand Up @@ -93,8 +92,8 @@ public static boolean isItemStackBlock(ItemStack itemStack, Block block) {
public static Block getBlockFromStack(ItemStack stack) {
if (stack.isEmpty())
return Blocks.AIR;
Item item = stack.getItem();
return item instanceof BlockItem ? ((BlockItem) item).getBlock() : Blocks.AIR;
var item = stack.getItem();
return item instanceof BlockItem blockItem ? blockItem.getBlock() : Blocks.AIR;
}

public static BlockState getBlockStateFromStack(ItemStack stack) {
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/mods/railcraft/util/container/StackFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import mods.railcraft.util.fluids.FluidTools;
import mods.railcraft.world.item.CartItem;
import net.minecraft.world.entity.vehicle.AbstractMinecart;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
Expand All @@ -38,15 +37,14 @@ public enum StackFilter implements Predicate<ItemStack> {
item instanceof CartItem;
}),
@SuppressWarnings("deprecation")
BALLAST(itemStack -> itemStack.getItem() instanceof BlockItem blockItem
&& blockItem.getBlock().builtInRegistryHolder().is(RailcraftTags.Blocks.BALLAST)),
BALLAST(itemStack -> ContainerTools.getBlockFromStack(itemStack)
.builtInRegistryHolder().is(RailcraftTags.Blocks.BALLAST)),
FLUID_CONTAINER(itemStack -> itemStack
.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM)
.isPresent()),
FEED(itemStack -> itemStack.getItem().isEdible()
|| itemStack.is(Items.WHEAT)
|| itemStack.getItem() instanceof BlockItem blockItem
&& blockItem.getBlock() instanceof StemBlock),
|| ContainerTools.getBlockFromStack(itemStack) instanceof StemBlock),
CARGO(itemStack -> (RailcraftConfig.SERVER.chestAllowFluids.get()
|| !FluidTools.isFluidHandler(itemStack))
&& !RailcraftConfig.SERVER.cargoBlacklist.get()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package mods.railcraft.world.entity.vehicle;

import java.util.Set;
import mods.railcraft.api.carts.RollingStock;
import mods.railcraft.api.track.RailShapeUtil;
import mods.railcraft.api.track.TrackUtil;
Expand Down Expand Up @@ -28,16 +27,14 @@

public class TrackUndercutter extends MaintenancePatternMinecart {

private static final Set<Block> EXCLUDED_BLOCKS = Set.of(Blocks.SAND);

public static final int SLOT_STOCK_UNDER = 0;
public static final int SLOT_STOCK_SIDE = 1;
private static final int SLOT_EXIST_UNDER_A = 0;
private static final int SLOT_EXIST_UNDER_B = 1;
private static final int SLOT_EXIST_SIDE_A = 2;
private static final int SLOT_EXIST_SIDE_B = 3;
private static final int SLOT_REPLACE_UNDER = 4;
private static final int SLOT_REPLACE_SIDE = 5;
public static final int SLOT_EXIST_UNDER_A = 0;
public static final int SLOT_EXIST_UNDER_B = 1;
public static final int SLOT_EXIST_SIDE_A = 2;
public static final int SLOT_EXIST_SIDE_B = 3;
public static final int SLOT_REPLACE_UNDER = 4;
public static final int SLOT_REPLACE_SIDE = 5;
private static final int[] SLOTS = ContainerTools.buildSlotArray(0, 2);

public TrackUndercutter(EntityType<?> type, Level level) {
Expand Down Expand Up @@ -127,7 +124,7 @@ private void replaceWith(BlockPos pos, int existingSlot, int stockSlot) {
var existingTrack = this.patternContainer.getItem(existingSlot);
var stockTrack = this.getItem(stockSlot);

if (!isValidBallast(stockTrack, this)) {
if (!isValidBallast(stockTrack)) {
return;
}

Expand Down Expand Up @@ -206,16 +203,14 @@ private static boolean blockMatches(BlockState state, ItemStack stack) {
return false;
}

public static boolean isValidBallast(ItemStack stack, TrackUndercutter trackUndercutter) {
public boolean isValidBallast(ItemStack stack) {
if (stack.isEmpty()) {
return false;
}
var state = ContainerTools.getBlockStateFromStack(stack);
if (EXCLUDED_BLOCKS.contains(state.getBlock())) {
if (state.is(RailcraftTags.Blocks.TRACK_UNDERCUTTER_INVALID_BALLAST)) {
return false;
}

return state.isSuffocating(trackUndercutter.level(),
trackUndercutter.blockPosition());
return state.isSuffocating(this.level(), this.blockPosition());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.Enchantments;
Expand Down Expand Up @@ -552,8 +551,8 @@ protected boolean placeBallast(BlockPos targetPos) {
if (!Block.canSupportRigidBlock(this.level(), targetPos)) {
return this.ballastContainer.stream()
.filter(slot -> slot.hasItem()
&& slot.item().getItem() instanceof BlockItem blockItem
&& blockItem.getBlock().builtInRegistryHolder().is(RailcraftTags.Blocks.BALLAST))
&& ContainerTools.getBlockFromStack(slot.item())
.builtInRegistryHolder().is(RailcraftTags.Blocks.BALLAST))
.findFirst()
.map(slot -> {
var searchPos = targetPos.mutable();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@

import mods.railcraft.world.entity.vehicle.TrackUndercutter;
import mods.railcraft.world.inventory.slot.BlockFilterSlot;
import mods.railcraft.world.inventory.slot.BlockFilterSlotLinked;
import mods.railcraft.world.inventory.slot.SlotLinked;
import net.minecraft.world.Container;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;

public class TrackUndercutterMenu extends RailcraftMenu {

Expand All @@ -17,37 +16,32 @@ public TrackUndercutterMenu(int id, Inventory inventory, TrackUndercutter trackU
this.trackUndercutter = trackUndercutter;

var container = trackUndercutter.getPattern();
this.addSlot(new BlockFilterSlot(container, 0, 17, 36));
this.addSlot(new BlockFilterSlot(container, 1, 35, 36));
this.addSlot(new BlockFilterSlot(container, 2, 17, 78));
this.addSlot(new BlockFilterSlot(container, 3, 35, 78));
var under = new SlotUndercutterFilter(container, 4, 80, 36, trackUndercutter);

var under = new BlockFilterSlot(trackUndercutter::isValidBallast, container,
TrackUndercutter.SLOT_REPLACE_UNDER, 80, 36);
this.addSlot(under);
var side = new SlotUndercutterFilter(container, 5, 80, 78, trackUndercutter);
this.addSlot(new BlockFilterSlotLinked(under, container,
TrackUndercutter.SLOT_EXIST_UNDER_A, 17, 36));
this.addSlot(new BlockFilterSlotLinked(under, container,
TrackUndercutter.SLOT_EXIST_UNDER_B, 35, 36));

var side = new BlockFilterSlot(trackUndercutter::isValidBallast, container,
TrackUndercutter.SLOT_REPLACE_SIDE, 80, 78);
this.addSlot(side);
this.addSlot(new SlotLinked(trackUndercutter, 0, 131, 36, under));
this.addSlot(new SlotLinked(trackUndercutter, 1, 131, 78, side));
this.addSlot(new BlockFilterSlotLinked(side, container,
TrackUndercutter.SLOT_EXIST_SIDE_A, 17, 78));
this.addSlot(new BlockFilterSlotLinked(side, container,
TrackUndercutter.SLOT_EXIST_SIDE_B, 35, 78));

this.addSlot(new SlotLinked(trackUndercutter,
TrackUndercutter.SLOT_STOCK_UNDER, 131, 36, under));
this.addSlot(new SlotLinked(trackUndercutter,
TrackUndercutter.SLOT_STOCK_SIDE, 131, 78, side));

this.addInventorySlots(inventory, 205);
}

public TrackUndercutter getTrackUndercutter() {
return trackUndercutter;
}

private static class SlotUndercutterFilter extends BlockFilterSlot {

private final TrackUndercutter trackUndercutter;

public SlotUndercutterFilter(Container container, int slotIndex, int posX, int posY,
TrackUndercutter trackUndercutter) {
super(container, slotIndex, posX, posY);
this.trackUndercutter = trackUndercutter;
}

@Override
public boolean mayPlace(ItemStack stack) {
return TrackUndercutter.isValidBallast(stack, trackUndercutter);
}
return this.trackUndercutter;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package mods.railcraft.world.inventory.slot;

import java.util.function.Predicate;
import net.minecraft.world.Container;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack;

public class BlockFilterSlot extends ItemFilterSlot {

public BlockFilterSlot(Container container, int slotIndex, int posX, int posY) {
super(itemStack -> itemStack.getItem() instanceof BlockItem, container, slotIndex, posX, posY);
public BlockFilterSlot(Predicate<ItemStack> filter, Container container,
int slotIndex, int posX, int posY) {
super(filter, container, slotIndex, posX, posY);
this.setPhantom();
this.setStackLimit(1);
}

public BlockFilterSlot(Container container, int slotIndex, int posX, int posY) {
this(itemStack -> itemStack.getItem() instanceof BlockItem, container, slotIndex, posX, posY);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package mods.railcraft.world.inventory.slot;

import net.minecraft.world.Container;

public class BlockFilterSlotLinked extends BlockFilterSlot {

public BlockFilterSlotLinked(BlockFilterSlot slot, Container container,
int slotIndex, int posX, int posY) {
super(slot::mayPlace, container, slotIndex, posX, posY);
}
}

0 comments on commit 3595425

Please sign in to comment.