Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@
import com.gregtechceu.gtceu.api.data.RotationState;
import com.gregtechceu.gtceu.api.item.IGTTool;
import com.gregtechceu.gtceu.api.item.MetaMachineItem;
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
import com.gregtechceu.gtceu.api.machine.MachineDefinition;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition;
import com.gregtechceu.gtceu.api.machine.feature.*;
import com.gregtechceu.gtceu.api.machine.trait.feature.IInteractionTrait;
import com.gregtechceu.gtceu.api.sync_system.ManagedSyncBlockEntity;
import com.gregtechceu.gtceu.common.data.GTItems;
import com.gregtechceu.gtceu.common.machine.owner.MachineOwner;
Expand Down Expand Up @@ -56,7 +53,6 @@
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Set;

import javax.annotation.ParametersAreNonnullByDefault;

Expand Down Expand Up @@ -277,18 +273,8 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player
machine.setOwnerUUID(sPlayer.getUUID());
}

Set<GTToolType> types = ToolHelper.getToolTypes(itemStack);
if (!types.isEmpty() && ToolHelper.canUse(itemStack) || types.isEmpty() && player.isShiftKeyDown()) {
var result = machine.onToolClick(types, itemStack, new UseOnContext(player, hand, hit));
if (result.getSecond() == InteractionResult.CONSUME && player instanceof ServerPlayer serverPlayer) {
ToolHelper.playToolSound(result.getFirst(), serverPlayer);

if (!serverPlayer.isCreative()) {
ToolHelper.damageItem(itemStack, serverPlayer, 1);
}
}
if (result.getSecond() != InteractionResult.PASS) return result.getSecond();
}
InteractionResult machineInteractResult = machine.onUse(state, world, pos, player, hand, hit);
if (machineInteractResult != InteractionResult.PASS) return machineInteractResult;

if (itemStack.is(GTItems.PORTABLE_SCANNER.get())) {
return itemStack.getItem().use(world, player, hand).getResult();
Expand All @@ -298,17 +284,6 @@ public InteractionResult use(BlockState state, Level world, BlockPos pos, Player
shouldOpenUi = gtToolItem.definition$shouldOpenUIAfterUse(new UseOnContext(player, hand, hit));
}

for (var trait : machine.getTraitHolder().getAllTraits()) {
if (trait instanceof IInteractionTrait interactionTrait) {
InteractionResult result = interactionTrait.onUse(state, world, pos, player, hand, hit);
if (result != InteractionResult.PASS) return result;
}
}

if (machine instanceof IInteractedMachine interactedMachine) {
var result = interactedMachine.onUse(state, world, pos, player, hand, hit);
if (result != InteractionResult.PASS) return result;
}
if (shouldOpenUi && machine instanceof IUIMachine uiMachine &&
MachineOwner.canOpenOwnerMachine(player, machine)) {
return uiMachine.tryToOpenUI(player, hand, hit);
Expand Down
41 changes: 41 additions & 0 deletions src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.gregtechceu.gtceu.api.gui.fancy.IFancyTooltip;
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.item.tool.IToolGridHighlight;
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
import com.gregtechceu.gtceu.api.machine.feature.*;
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine;
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiPart;
Expand Down Expand Up @@ -390,6 +391,46 @@ protected InteractionResult onScrewdriverClick(Player playerIn, InteractionHand
return InteractionResult.PASS;
}

/**
* Called when a machine is right clicked.
*/
public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult hit) {
ItemStack itemStack = player.getItemInHand(hand);

Set<GTToolType> types = ToolHelper.getToolTypes(itemStack);
if (!types.isEmpty() && ToolHelper.canUse(itemStack) || types.isEmpty() && player.isShiftKeyDown()) {
var result = onToolClick(types, itemStack, new UseOnContext(player, hand, hit));
if (result.getSecond() == InteractionResult.CONSUME && player instanceof ServerPlayer serverPlayer) {
ToolHelper.playToolSound(result.getFirst(), serverPlayer);

if (!serverPlayer.isCreative()) {
ToolHelper.damageItem(itemStack, serverPlayer, 1);
}
}
if (result.getSecond() != InteractionResult.PASS) return result.getSecond();
}

for (var trait : getTraitHolder().getAllTraits()) {
if (trait instanceof IInteractionTrait interactionTrait) {
InteractionResult result = interactionTrait.onUse(state, world, pos, player, hand, hit);
if (result != InteractionResult.PASS) return result;
}
}

return InteractionResult.PASS;
}

/**
* Called when a machine is left clicked.
*
* @return true to cancel the click event, false to continue processing
*/
public boolean onLeftClick(Player player, Level world, InteractionHand hand, BlockPos pos,
@Nullable Direction face) {
return false;
}

//////////////////////////////////////
// ********** MISC ***********//
//////////////////////////////////////
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,24 +1,16 @@
package com.gregtechceu.gtceu.api.machine.feature.multiblock;

import com.gregtechceu.gtceu.api.capability.IParallelHatch;
import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine;
import com.gregtechceu.gtceu.api.machine.feature.IMachineFeature;
import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine;
import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties;
import com.gregtechceu.gtceu.api.pattern.BlockPattern;
import com.gregtechceu.gtceu.api.pattern.MultiblockState;
import com.gregtechceu.gtceu.client.renderer.MultiblockInWorldPreviewRenderer;
import com.gregtechceu.gtceu.config.ConfigHolder;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand All @@ -28,7 +20,7 @@
import java.util.Optional;
import java.util.concurrent.locks.Lock;

public interface IMultiController extends IMachineFeature, IInteractedMachine {
public interface IMultiController extends IMachineFeature {

BooleanProperty IS_FORMED_PROPERTY = GTMachineModelProperties.IS_FORMED;

Expand Down Expand Up @@ -196,22 +188,6 @@ default Comparator<IMultiPart> getPartSorter() {
return self().getDefinition().getPartSorter().apply(self());
}

/**
* Show the preview of structure.
*/
@Override
default InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult hit) {
if (!self().isFormed() && player.isShiftKeyDown() && player.getItemInHand(hand).isEmpty()) {
if (world.isClientSide()) {
MultiblockInWorldPreviewRenderer.showPreview(pos, self(),
ConfigHolder.INSTANCE.client.inWorldPreviewDuration * 20);
}
return InteractionResult.SUCCESS;
}
return IInteractedMachine.super.onUse(state, world, pos, player, hand, hit);
}

default boolean allowCircuitSlots() {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,19 @@
import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField;
import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient;
import com.gregtechceu.gtceu.client.model.machine.MachineRenderState;
import com.gregtechceu.gtceu.client.renderer.MultiblockInWorldPreviewRenderer;
import com.gregtechceu.gtceu.config.ConfigHolder;

import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;

import lombok.Getter;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -265,4 +272,17 @@ public void setFrontFacing(Direction facing) {
checkPattern();
}
}

@Override
public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult hit) {
if (!isFormed() && player.isShiftKeyDown() && player.getItemInHand(hand).isEmpty()) {
if (world.isClientSide()) {
MultiblockInWorldPreviewRenderer.showPreview(pos, this,
ConfigHolder.INSTANCE.client.inWorldPreviewDuration * 20);
}
return InteractionResult.SUCCESS;
}
return super.onUse(state, world, pos, player, hand, hit);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
import com.gregtechceu.gtceu.api.machine.feature.IDataInfoProvider;
import com.gregtechceu.gtceu.api.machine.feature.IExplosionMachine;
import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine;
import com.gregtechceu.gtceu.api.machine.feature.IUIMachine;
import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank;
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
Expand Down Expand Up @@ -67,8 +66,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public abstract class SteamBoilerMachine extends SteamWorkableMachine
implements IUIMachine, IExplosionMachine, IDataInfoProvider,
IInteractedMachine {
implements IUIMachine, IExplosionMachine, IDataInfoProvider {

@SaveField
public final NotifiableFluidTank waterTank;
Expand Down Expand Up @@ -304,7 +302,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play
return InteractionResult.SUCCESS;
}
}
return IInteractedMachine.super.onUse(state, world, pos, player, hand, hit);
return super.onUse(state, world, pos, player, hand, hit);
}

//////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine;
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMaintenanceMachine;
import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine;
import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties;
Expand Down Expand Up @@ -55,7 +54,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class MaintenanceHatchPartMachine extends TieredPartMachine
implements IMaintenanceMachine, IInteractedMachine {
implements IMaintenanceMachine {

private static final float MAX_DURATION_MULTIPLIER = 1.1f;
private static final float MIN_DURATION_MULTIPLIER = 0.9f;
Expand Down Expand Up @@ -330,7 +329,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play
return InteractionResult.SUCCESS;
}
}
return InteractionResult.PASS;
return super.onUse(state, world, pos, player, hand, hit);
}

//////////////////////////////////////
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import com.gregtechceu.gtceu.api.gui.GuiTextures;
import com.gregtechceu.gtceu.api.gui.widget.BlockableSlotWidget;
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine;
import com.gregtechceu.gtceu.api.machine.feature.ITieredMachine;
import com.gregtechceu.gtceu.api.machine.feature.multiblock.*;
import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine;
Expand Down Expand Up @@ -43,7 +42,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class RotorHolderPartMachine extends TieredPartMachine
implements IRotorHolderMachine, IInteractedMachine {
implements IRotorHolderMachine {

@SaveField
public final NotifiableItemStackHandler inventory;
Expand Down Expand Up @@ -217,8 +216,11 @@ public void setRotorStack(ItemStack rotorStack) {
inventory.onContentsChanged();
}

@Override
public InteractionResult onUse(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult hit) {
var superResult = super.onUse(state, level, pos, player, hand, hit);
if (superResult != InteractionResult.PASS) return superResult;
if (!isRemote() && getRotorSpeed() > 0 && !player.isCreative()) {
TurbineRotorBehaviour behaviour = TurbineRotorBehaviour.getBehaviour(getRotorStack());
if (behaviour != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo;
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
import com.gregtechceu.gtceu.api.machine.feature.IInteractedMachine;
import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection;
import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField;

Expand All @@ -19,8 +18,11 @@
import lombok.Getter;
import org.jetbrains.annotations.Nullable;

import javax.annotation.ParametersAreNonnullByDefault;

@MethodsReturnNonnullByDefault
public class AdvancedMonitorPartMachine extends MonitorPartMachine implements IInteractedMachine {
@ParametersAreNonnullByDefault
public class AdvancedMonitorPartMachine extends MonitorPartMachine {

@Getter
@SaveField
Expand All @@ -44,8 +46,7 @@ public AdvancedMonitorPartMachine(BlockEntityCreationInfo info) {
@Override
public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult hit) {
if (hit.getDirection() != getFrontFacing())
return IInteractedMachine.super.onUse(state, world, pos, player, hand, hit);
if (hit.getDirection() != getFrontFacing()) return super.onUse(state, world, pos, player, hand, hit);
clicked = true;
clickPosX = hit.getLocation()
.get(RelativeDirection.RIGHT.getRelative(getFrontFacing(), getUpwardsFacing(), false).getAxis());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,9 @@ protected void randomDisplayTick(RandomSource random, float x, float y, float z)
public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand,
BlockHitResult hit) {
if (!isRemote()) {
if (super.onUse(state, world, pos, player, hand, hit) == InteractionResult.SUCCESS) {
return InteractionResult.SUCCESS;
}
if (FluidUtil.interactWithFluidHandler(player, hand, fuelTank)) {
return InteractionResult.SUCCESS;
}
return InteractionResult.PASS;
}
return super.onUse(state, world, pos, player, hand, hit);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class CrateMachine extends MetaMachine implements IUIMachine,
IDropSaveMachine, IInteractedMachine {
public class CrateMachine extends MetaMachine implements IUIMachine, IDropSaveMachine {

public static final BooleanProperty TAPED_PROPERTY = GTMachineModelProperties.IS_TAPED;

Expand Down Expand Up @@ -103,7 +102,7 @@ public InteractionResult onUse(BlockState state, Level world, BlockPos pos, Play
return InteractionResult.sidedSuccess(world.isClientSide);
}
}
return IInteractedMachine.super.onUse(state, world, pos, player, hand, hit);
return super.onUse(state, world, pos, player, hand, hit);
}

@Override
Expand Down
Loading
Loading