use of com.simibubi.create.content.logistics.item.filter.FilterItem in project Create by Creators-of-Create.
the class FilteringBehaviour method destroy.
@Override
public void destroy() {
if (filter.getItem() instanceof FilterItem) {
Vec3 pos = VecHelper.getCenterOf(getPos());
Level world = getWorld();
world.addFreshEntity(new ItemEntity(world, pos.x, pos.y, pos.z, filter.copy()));
}
super.destroy();
}
use of com.simibubi.create.content.logistics.item.filter.FilterItem in project Create by Creators-of-Create.
the class FilteringHandler method onScroll.
@OnlyIn(Dist.CLIENT)
public static boolean onScroll(double delta) {
HitResult objectMouseOver = Minecraft.getInstance().hitResult;
if (!(objectMouseOver instanceof BlockHitResult))
return false;
BlockHitResult result = (BlockHitResult) objectMouseOver;
Minecraft mc = Minecraft.getInstance();
ClientLevel world = mc.level;
BlockPos blockPos = result.getBlockPos();
FilteringBehaviour filtering = TileEntityBehaviour.get(world, blockPos, FilteringBehaviour.TYPE);
if (filtering == null)
return false;
if (mc.player.isShiftKeyDown())
return false;
if (!mc.player.mayBuild())
return false;
if (!filtering.isCountVisible())
return false;
if (!filtering.isActive())
return false;
if (filtering.slotPositioning instanceof ValueBoxTransform.Sided)
((Sided) filtering.slotPositioning).fromSide(result.getDirection());
if (!filtering.testHit(objectMouseOver.getLocation()))
return false;
ItemStack filterItem = filtering.getFilter();
filtering.ticksUntilScrollPacket = 10;
int maxAmount = (filterItem.getItem() instanceof FilterItem) ? 64 : filterItem.getMaxStackSize();
int prev = filtering.scrollableValue;
filtering.scrollableValue = (int) Mth.clamp(filtering.scrollableValue + delta * (AllKeys.ctrlDown() ? 16 : 1), 0, maxAmount);
if (prev != filtering.scrollableValue) {
float pitch = (filtering.scrollableValue) / (float) (maxAmount);
pitch = Mth.lerp(pitch, 1.5f, 2f);
AllSoundEvents.SCROLL_VALUE.play(world, mc.player, blockPos, 1, pitch);
}
return true;
}
use of com.simibubi.create.content.logistics.item.filter.FilterItem in project Create by Creators-of-Create.
the class FilteringRenderer method tick.
public static void tick() {
Minecraft mc = Minecraft.getInstance();
HitResult target = mc.hitResult;
if (target == null || !(target instanceof BlockHitResult))
return;
BlockHitResult result = (BlockHitResult) target;
ClientLevel world = mc.level;
BlockPos pos = result.getBlockPos();
BlockState state = world.getBlockState(pos);
FilteringBehaviour behaviour = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE);
if (mc.player.isShiftKeyDown())
return;
if (behaviour == null)
return;
if (behaviour instanceof SidedFilteringBehaviour) {
behaviour = ((SidedFilteringBehaviour) behaviour).get(result.getDirection());
if (behaviour == null)
return;
}
if (!behaviour.isActive())
return;
if (behaviour.slotPositioning instanceof ValueBoxTransform.Sided)
((Sided) behaviour.slotPositioning).fromSide(result.getDirection());
if (!behaviour.slotPositioning.shouldRender(state))
return;
ItemStack filter = behaviour.getFilter();
boolean isFilterSlotted = filter.getItem() instanceof FilterItem;
boolean showCount = behaviour.isCountVisible();
boolean fluids = behaviour.fluidFilter;
Component label = isFilterSlotted ? TextComponent.EMPTY : Lang.translate(behaviour.recipeFilter ? "logistics.recipe_filter" : fluids ? "logistics.fluid_filter" : "logistics.filter");
boolean hit = behaviour.slotPositioning.testHit(state, target.getLocation().subtract(Vec3.atLowerCornerOf(pos)));
AABB emptyBB = new AABB(Vec3.ZERO, Vec3.ZERO);
AABB bb = isFilterSlotted ? emptyBB.inflate(.45f, .31f, .2f) : emptyBB.inflate(.25f);
ValueBox box = showCount ? new ItemValueBox(label, bb, pos, filter, behaviour.scrollableValue) : new ValueBox(label, bb, pos);
box.offsetLabel(behaviour.textShift).withColors(fluids ? 0x407088 : 0x7A6A2C, fluids ? 0x70adb5 : 0xB79D64).scrollTooltip(showCount && !isFilterSlotted ? new TextComponent("[").append(Lang.translate("action.scroll")).append("]") : TextComponent.EMPTY).passive(!hit);
CreateClient.OUTLINER.showValueBox(Pair.of("filter", pos), box.transform(behaviour.slotPositioning)).lineWidth(1 / 64f).withFaceTexture(hit ? AllSpecialTextures.THIN_CHECKERED : null).highlightFace(result.getDirection());
}
use of com.simibubi.create.content.logistics.item.filter.FilterItem in project Create by Creators-of-Create.
the class FilteringHandler method onBlockActivated.
@SubscribeEvent
public static void onBlockActivated(PlayerInteractEvent.RightClickBlock event) {
Level world = event.getWorld();
BlockPos pos = event.getPos();
Player player = event.getPlayer();
InteractionHand hand = event.getHand();
if (player.isShiftKeyDown() || player.isSpectator())
return;
FilteringBehaviour behaviour = TileEntityBehaviour.get(world, pos, FilteringBehaviour.TYPE);
if (behaviour == null)
return;
BlockHitResult ray = RaycastHelper.rayTraceRange(world, player, 10);
if (ray == null)
return;
if (behaviour instanceof SidedFilteringBehaviour) {
behaviour = ((SidedFilteringBehaviour) behaviour).get(ray.getDirection());
if (behaviour == null)
return;
}
if (!behaviour.isActive())
return;
if (behaviour.slotPositioning instanceof ValueBoxTransform.Sided)
((Sided) behaviour.slotPositioning).fromSide(ray.getDirection());
if (!behaviour.testHit(ray.getLocation()))
return;
ItemStack toApply = player.getItemInHand(hand).copy();
if (AllItems.WRENCH.isIn(toApply))
return;
if (AllBlocks.MECHANICAL_ARM.isIn(toApply))
return;
if (event.getSide() != LogicalSide.CLIENT) {
if (!player.isCreative()) {
if (toApply.getItem() instanceof FilterItem)
player.getItemInHand(hand).shrink(1);
if (behaviour.getFilter().getItem() instanceof FilterItem)
player.getInventory().placeItemBackInInventory(behaviour.getFilter());
}
if (toApply.getItem() instanceof FilterItem)
toApply.setCount(1);
behaviour.setFilter(toApply);
} else {
ItemStack filter = behaviour.getFilter();
String feedback = "apply_click_again";
if (toApply.getItem() instanceof FilterItem || !behaviour.isCountVisible())
feedback = "apply";
else if (ItemHandlerHelper.canItemStacksStack(toApply, filter))
feedback = "apply_count";
String translationKey = world.getBlockState(pos).getBlock().getDescriptionId();
Component formattedText = new TranslatableComponent(translationKey);
player.displayClientMessage(Lang.createTranslationTextComponent("logistics.filter." + feedback, formattedText).withStyle(ChatFormatting.WHITE), true);
}
event.setCanceled(true);
event.setCancellationResult(InteractionResult.SUCCESS);
world.playSound(null, pos, SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.BLOCKS, .25f, .1f);
}
Aggregations