Skip to content

Commit

Permalink
Merge branch 'mc1.18/dev' into mc1.19/dev
Browse files Browse the repository at this point in the history
  • Loading branch information
simibubi committed Jul 4, 2023
2 parents 064dc1e + 6819fc1 commit 20fde55
Show file tree
Hide file tree
Showing 10 changed files with 56 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,11 @@ default void dropItem(MovementContext context, ItemStack stack) {
if (remainder.isEmpty())
return;

// Actors might void items if their positions is undefined
Vec3 vec = context.position;
if (vec == null)
return;

ItemEntity itemEntity = new ItemEntity(context.world, vec.x, vec.y, vec.z, remainder);
itemEntity.setDeltaMovement(context.motion.add(0, 0.5f, 0)
.scale(context.world.random.nextFloat() * .3f));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.simibubi.create.content.equipment.armor;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

import com.simibubi.create.AllEnchantments;
import com.simibubi.create.AllSoundEvents;
import com.simibubi.create.AllTags;
Expand All @@ -15,16 +19,13 @@
import net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket;
import net.minecraft.network.protocol.game.ClientboundSetTitlesAnimationPacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public class BacktankUtil {

private static final List<Function<LivingEntity, List<ItemStack>>> BACKTANK_SUPPLIERS = new ArrayList<>();
Expand Down Expand Up @@ -173,6 +174,11 @@ public static int getBarColor(ItemStack stack, int usesPerTank) {
if (player == null)
return 0;
List<ItemStack> backtanks = getAllWithAir(player);

// Fallback colour
if (backtanks.isEmpty())
return Mth.hsvToRgb(Math.max(0.0F, 1.0F - (float) stack.getDamageValue() / stack.getMaxDamage()) / 3.0F,
1.0F, 1.0F);

// Just return the "first" backtank for the bar color since that's the one we are consuming from
return backtanks.get(0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,8 @@ private static BiPredicate<LevelAccessor, BlockHitResult> plantCrop(Supplier<? e
if (world instanceof Level l && !l.isLoaded(hitPos))
return true;
Direction face = ray.getDirection();
if (face != Direction.UP)
return false;
BlockPos placePos = hitPos.relative(face);
if (!world.getBlockState(placePos)
.getMaterial()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;

import com.simibubi.create.AllRecipeTypes;
import com.simibubi.create.content.fluids.transfer.FillingRecipe;
Expand Down Expand Up @@ -37,8 +38,8 @@ public static boolean canItemBeFilled(Level world, ItemStack stack) {
public static int getRequiredAmountForItem(Level world, ItemStack stack, FluidStack availableFluid) {
WRAPPER.setItem(0, stack);

Optional<FillingRecipe> assemblyRecipe =
SequencedAssemblyRecipe.getRecipe(world, WRAPPER, AllRecipeTypes.FILLING.getType(), FillingRecipe.class);
Optional<FillingRecipe> assemblyRecipe = SequencedAssemblyRecipe.getRecipe(world, WRAPPER,
AllRecipeTypes.FILLING.getType(), FillingRecipe.class, matchItemAndFluid(world, availableFluid));
if (assemblyRecipe.isPresent()) {
FluidIngredient requiredFluid = assemblyRecipe.get()
.getRequiredFluid();
Expand All @@ -62,9 +63,10 @@ public static ItemStack fillItem(Level world, int requiredAmount, ItemStack stac

WRAPPER.setItem(0, stack);

FillingRecipe fillingRecipe =
SequencedAssemblyRecipe.getRecipe(world, WRAPPER, AllRecipeTypes.FILLING.getType(), FillingRecipe.class)
.filter(fr -> fr.getRequiredFluid()
FillingRecipe fillingRecipe = SequencedAssemblyRecipe
.getRecipe(world, WRAPPER, AllRecipeTypes.FILLING.getType(), FillingRecipe.class,
matchItemAndFluid(world, availableFluid))
.filter(fr -> fr.getRequiredFluid()
.test(toFill))
.orElseGet(() -> {
for (Recipe<RecipeWrapper> recipe : world.getRecipeManager()
Expand All @@ -87,4 +89,9 @@ public static ItemStack fillItem(Level world, int requiredAmount, ItemStack stac
return GenericItemFilling.fillItem(world, requiredAmount, stack, availableFluid);
}

private static Predicate<FillingRecipe> matchItemAndFluid(Level world, FluidStack availableFluid) {
return r -> r.matches(WRAPPER, world) && r.getRequiredFluid()
.test(availableFluid);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@ protected Fluid search(Fluid fluid, List<BlockPosEntry> frontier, Set<BlockPos>
}

protected void playEffect(Level world, BlockPos pos, Fluid fluid, boolean fillSound) {
if (fluid == null)
return;

BlockPos splooshPos = pos == null ? blockEntity.getBlockPos() : pos;
FluidStack stack = new FluidStack(fluid, 1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -570,10 +570,6 @@ public static BlockPos nextSegmentPosition(BlockState state, BlockPos pos, boole
return pos;
}

public static boolean canAccessFromSide(Direction facing, BlockState belt) {
return true;
}

@Override
public Class<BeltBlockEntity> getBlockEntityClass() {
return BeltBlockEntity.class;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;

public class BeltBlockEntity extends KineticBlockEntity {
Expand Down Expand Up @@ -183,14 +182,11 @@ protected void initializeItemHandler() {

@Override
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
if (!isItemHandlerCap(cap))
return super.getCapability(cap, side);
if (!isRemoved() && !itemHandler.isPresent())
initializeItemHandler();
if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
if (side == Direction.UP || BeltBlock.canAccessFromSide(side, getBlockState())) {
return itemHandler.cast();
}
}
return super.getCapability(cap, side);
return itemHandler.cast();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -547,9 +547,6 @@ private boolean acceptOutputsInner(List<ItemStack> outputItems, List<FluidStack>
if (simulate)
return true;
for (ItemStack itemStack : outputItems) {
if (itemStack.hasCraftingRemainingItem() && itemStack.getCraftingRemainingItem()
.sameItem(itemStack))
continue;
spoutputBuffer.add(itemStack.copy());
}
if (!externalTankNotPresent)
Expand Down Expand Up @@ -591,10 +588,6 @@ private boolean acceptFluidOutputsIntoBasin(List<FluidStack> outputFluids, boole

private boolean acceptItemOutputsIntoBasin(List<ItemStack> outputItems, boolean simulate, IItemHandler targetInv) {
for (ItemStack itemStack : outputItems) {
// Catalyst items are never consumed
if (itemStack.hasCraftingRemainingItem() && itemStack.getCraftingRemainingItem()
.sameItem(itemStack))
continue;
if (!ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), simulate)
.isEmpty())
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Stream;

import com.simibubi.create.AllRecipeTypes;
Expand Down Expand Up @@ -57,9 +58,13 @@ public SequencedAssemblyRecipe(ResourceLocation recipeId, SequencedAssemblyRecip

public static <C extends Container, R extends ProcessingRecipe<C>> Optional<R> getRecipe(Level world, C inv,
RecipeType<R> type, Class<R> recipeClass) {
//return getRecipe(world, inv.getStackInSlot(0), type, recipeClass).filter(r -> r.matches(inv, world));
return getRecipes(world, inv.getItem(0), type, recipeClass).filter(r -> r.matches(inv, world))
.findFirst();
return getRecipe(world, inv, type, recipeClass, r -> r.matches(inv, world));
}

public static <C extends Container, R extends ProcessingRecipe<C>> Optional<R> getRecipe(Level world, C inv,
RecipeType<R> type, Class<R> recipeClass, Predicate<? super R> recipeFilter) {
return getRecipes(world, inv.getItem(0), type, recipeClass).filter(recipeFilter)
.findFirst();
}

public static <R extends ProcessingRecipe<?>> Optional<R> getRecipe(Level world, ItemStack item,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,8 @@ public MutableComponent formatValue(ValueSettings value) {
public void onShortInteract(Player player, InteractionHand hand, Direction side) {
Level level = getWorld();
BlockPos pos = getPos();
ItemStack toApply = player.getItemInHand(hand)
.copy();
ItemStack itemInHand = player.getItemInHand(hand);
ItemStack toApply = itemInHand.copy();

if (AllItems.WRENCH.isIn(toApply))
return;
Expand All @@ -281,23 +281,13 @@ public void onShortInteract(Player player, InteractionHand hand, Direction side)
if (level.isClientSide())
return;

if (!player.isCreative()) {
if (toApply.getItem() instanceof FilterItem) {
if (toApply.getCount() == 1)
player.setItemInHand(hand, ItemStack.EMPTY);
else
player.getItemInHand(hand)
.shrink(1);
}
}

if (getFilter().getItem() instanceof FilterItem) {
if (getFilter(side).getItem() instanceof FilterItem) {
if (!player.isCreative() || ItemHelper
.extract(new InvWrapper(player.getInventory()),
stack -> ItemHandlerHelper.canItemStacksStack(stack, getFilter()), true)
stack -> ItemHandlerHelper.canItemStacksStack(stack, getFilter(side)), true)
.isEmpty())
player.getInventory()
.placeItemBackInInventory(getFilter());
.placeItemBackInInventory(getFilter(side));
}

if (toApply.getItem() instanceof FilterItem)
Expand All @@ -308,6 +298,15 @@ public void onShortInteract(Player player, InteractionHand hand, Direction side)
AllSoundEvents.DENY.playOnServer(player.level, player.blockPosition(), 1, 1);
return;
}

if (!player.isCreative()) {
if (toApply.getItem() instanceof FilterItem) {
if (itemInHand.getCount() == 1)
player.setItemInHand(hand, ItemStack.EMPTY);
else
itemInHand.shrink(1);
}
}

level.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, .25f, .1f);
}
Expand Down

0 comments on commit 20fde55

Please sign in to comment.