Skip to content

Commit

Permalink
Small utils cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Sm0keySa1m0n committed Sep 5, 2023
1 parent a9e33c4 commit 469f03b
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 92 deletions.
29 changes: 12 additions & 17 deletions src/main/java/mods/railcraft/util/ItemStackKey.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,31 @@
package mods.railcraft.util;

import mods.railcraft.util.container.ContainerTools;
import net.minecraft.nbt.CompoundTag;
import java.util.Objects;
import net.minecraft.world.item.ItemStack;

public record ItemStackKey(ItemStack stack) {
public record ItemStackKey(ItemStack itemStack) {

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
if (this == obj) {
return true;
}
if (getClass() != obj.getClass()) {
return false;
if (obj instanceof ItemStackKey other) {
return ItemStack.isSameItem(this.itemStack, other.itemStack);
}
final ItemStackKey other = (ItemStackKey) obj;
return ContainerTools.isItemEqual(stack, other.stack);
return false;
}

@Override
public int hashCode() {
int hash = 5;
hash = 23 * hash + stack.getItem().hashCode();
hash = 23 * hash + stack.getDamageValue();
CompoundTag nbt = stack.getTag();
if (nbt != null)
hash = 23 * hash + nbt.hashCode();
return hash;
return Objects.hash(
this.itemStack.getItem(),
this.itemStack.getDamageValue(),
this.itemStack.getTag());
}

public ItemStack copyStack() {
return this.stack.copy();
return this.itemStack.copy();
}

public static ItemStackKey make(ItemStack stack) {
Expand Down
83 changes: 11 additions & 72 deletions src/main/java/mods/railcraft/util/LevelUtil.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package mods.railcraft.util;

import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Predicate;
import org.jetbrains.annotations.Nullable;
import mods.railcraft.api.core.RailcraftFakePlayer;
import net.minecraft.core.BlockPos;
Expand Down Expand Up @@ -59,11 +57,6 @@ public static boolean setBlockStateWorldGen(Level level, BlockPos pos, BlockStat
return level.setBlock(pos, blockState, Block.UPDATE_ALL);
}

public static boolean setBlockState(Level level, BlockPos pos, BlockState blockState,
int update) {
return level.setBlock(pos, blockState, update);
}

public static boolean setAir(Level level, BlockPos pos) {
return level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState());
}
Expand Down Expand Up @@ -117,72 +110,18 @@ public static boolean playerRemoveBlock(Level level, BlockPos pos, @Nullable Pla
return true;
}

public static void neighborAction(BlockPos pos, Direction[] sides, Consumer<BlockPos> action) {
for (var side : sides) {
action.accept(pos.relative(side));
}
}

public static void sendBlockUpdated(Level level, BlockPos pos) {
sendBlockUpdated(level, pos, level.getBlockState(pos));
}

public static void sendBlockUpdated(Level level, BlockPos pos, BlockState state) {
sendBlockUpdated(level, pos, state, state);
}

public static void sendBlockUpdated(Level level, BlockPos pos, BlockState oldState,
BlockState newState) {
level.sendBlockUpdated(pos, oldState, newState, Block.UPDATE_LIMIT);
}

@Nullable
public static BlockPos findBlock(Level level, BlockPos pos, int distance,
Predicate<BlockState> matcher) {
int x = pos.getX();
int y = pos.getY();
int z = pos.getZ();
for (int yy = y - distance; yy < y + distance; yy++) {
for (int xx = x - distance; xx < x + distance; xx++) {
for (int zz = z - distance; zz < z + distance; zz++) {
var test = new BlockPos(xx, yy, zz);
if (matcher.test(level.getBlockState(test)))
return test;
}
}
}
return null;
}

public static void spewItem(ItemStack stack, Level level, double x, double y, double z) {
if (!stack.isEmpty()) {
float xOffset = level.random.nextFloat() * 0.8F + 0.1F;
float yOffset = level.random.nextFloat() * 0.8F + 0.1F;
float zOffset = level.random.nextFloat() * 0.8F + 0.1F;
while (!stack.isEmpty()) {
int numToDrop = level.random.nextInt(21) + 10;
if (numToDrop > stack.getCount())
numToDrop = stack.getCount();
ItemStack newStack = stack.copy();
setSize(newStack, numToDrop);
decSize(stack, numToDrop);
var itemEntity = new ItemEntity(level, x + xOffset, y + yOffset, z + zOffset, newStack);
level.addFreshEntity(itemEntity);
}
if (stack.isEmpty()) {
return;
}
float xOffset = level.random.nextFloat() * 0.8F + 0.1F;
float yOffset = level.random.nextFloat() * 0.8F + 0.1F;
float zOffset = level.random.nextFloat() * 0.8F + 0.1F;
while (!stack.isEmpty()) {
int numToDrop = Math.min(level.random.nextInt(21) + 10, stack.getCount());
var newStack = stack.split(numToDrop);
var itemEntity = new ItemEntity(level, x + xOffset, y + yOffset, z + zOffset, newStack);
level.addFreshEntity(itemEntity);
}
}

private static ItemStack setSize(ItemStack stack, int size) {
if (stack.isEmpty())
return ItemStack.EMPTY;
stack.setCount(size);
return stack;
}

private static ItemStack decSize(ItemStack stack, int size) {
if (stack.isEmpty())
return ItemStack.EMPTY;
stack.shrink(size);
return stack;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ public static ContainerManifest create(ContainerManipulator<?> containers,
Collection<ItemStackKey> keys) {
var manifest = new ContainerManifest();
for (var filterKey : keys) {
var filter = StackFilter.anyMatch(filterKey.stack());
var filter = StackFilter.anyMatch(filterKey.itemStack());
containers.streamItems()
.filter(filter)
.forEach(stack -> manifest.compute(filterKey, (k, v) -> compute(k, v, stack)));
Expand All @@ -98,7 +98,7 @@ public static ContainerManifest create(ContainerManipulator<?> containers,
public static ContainerManifest create(Container container, Collection<ItemStackKey> keys) {
var manifest = new ContainerManifest();
for (var filterKey : keys) {
var filter = StackFilter.anyMatch(filterKey.stack());
var filter = StackFilter.anyMatch(filterKey.itemStack());
IntStream.range(0, container.getContainerSize())
.mapToObj(container::getItem)
.filter(filter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public abstract class ItemManipulatorBlockEntity extends ManipulatorBlockEntity

ContainerManifest remainingManifest = ContainerManifest.create(tile.getSource());
remainingManifest.keySet()
.removeIf(stackKey -> StackFilter.anyMatch(tile.getItemFilters()).test(stackKey.stack()));
.removeIf(stackKey -> StackFilter.anyMatch(tile.getItemFilters()).test(stackKey.itemStack()));

return remainingManifest.streamValueStacks().anyMatch(dest::willAccept);
});
Expand Down

0 comments on commit 469f03b

Please sign in to comment.