Skip to content

Commit

Permalink
wireless crafting terminal
Browse files Browse the repository at this point in the history
  • Loading branch information
Mari023 committed Nov 16, 2021
1 parent 392fdd1 commit 306c964
Show file tree
Hide file tree
Showing 33 changed files with 395 additions and 161 deletions.
13 changes: 8 additions & 5 deletions src/main/java/appeng/api/features/WirelessTerminalsInternal.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
import net.minecraft.world.item.ItemStack;

import appeng.core.localization.PlayerMessages;
import appeng.items.tools.powered.WirelessTerminalItem;
import appeng.menu.MenuLocator;
import appeng.menu.MenuOpener;
import appeng.menu.me.items.WirelessTermMenu;

public final class WirelessTerminalsInternal {

Expand All @@ -40,15 +40,18 @@ public static void installOpener() {
private static class Opener implements WirelessTerminals.Opener {
@Override
public void open(ItemStack item, Player player, int inventorySlot) {
if (checkPreconditions(item, player)) {
MenuOpener.open(WirelessTermMenu.TYPE, player, MenuLocator.forInventorySlot(inventorySlot));
if (checkPreconditions(item, player)
&& item.getItem() instanceof WirelessTerminalItem wirelessTerminalItem) {
MenuOpener.open(wirelessTerminalItem.getMenuType(), player,
MenuLocator.forInventorySlot(inventorySlot));
}
}

@Override
public void open(ItemStack item, Player player, InteractionHand hand) {
if (checkPreconditions(item, player)) {
MenuOpener.open(WirelessTermMenu.TYPE, player, MenuLocator.forHand(player, hand));
if (checkPreconditions(item, player)
&& item.getItem() instanceof WirelessTerminalItem wirelessTerminalItem) {
MenuOpener.open(wirelessTerminalItem.getMenuType(), player, MenuLocator.forHand(player, hand));
}
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/appeng/api/ids/AEItemIds.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public final class AEItemIds {
public static final ResourceLocation CHARGED_STAFF = id("charged_staff");
public static final ResourceLocation COLOR_APPLICATOR = id("color_applicator");
public static final ResourceLocation WIRELESS_TERMINAL = id("wireless_terminal");
public static final ResourceLocation WIRELESS_CRAFTING_TERMINAL = id("wireless_crafting_terminal");
public static final ResourceLocation NETHER_QUARTZ_SEED = id("nether_quartz_seed");
public static final ResourceLocation FLUIX_CRYSTAL_SEED = id("fluix_crystal_seed");
public static final ResourceLocation CERTUS_CRYSTAL_SEED = id("certus_crystal_seed");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import javax.annotation.Nullable;

import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

Expand All @@ -39,9 +40,23 @@ public interface IGuiItem {
* @param playerInventorySlot The slot in the player's inventory the item is in.
* @param level The level the player is in.
* @param pos If the item was used on a block in the world, has that block's position. Null if no
* block was targetted.
* block was targeted.
* @return Null if no GUI object is available.
*/
@Nullable
IGuiItemObject getGuiObject(ItemStack is, int playerInventorySlot, Level level, @Nullable BlockPos pos);

/**
*
* @param is The item used to open the menu.
* @param playerInventorySlot The slot in the player's inventory the item is in.
* @param player The player opening the menu.
* @param pos If the item was used on a block in the world, has that block's position. Null if no
* block was targeted.
* @return Null if no GUI object is available.
*/
@Nullable
default IGuiItemObject getGuiObject(ItemStack is, int playerInventorySlot, Player player, @Nullable BlockPos pos) {
return getGuiObject(is, playerInventorySlot, player.level, pos);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,9 @@
import appeng.util.Platform;
import appeng.util.prioritylist.IPartitionList;

public class FluidTerminalScreen extends MEMonitorableScreen<AEFluidKey, FluidTerminalMenu> {
public class FluidTerminalScreen<C extends FluidTerminalMenu> extends MEMonitorableScreen<AEFluidKey, C> {

public FluidTerminalScreen(FluidTerminalMenu menu, Inventory playerInventory,
Component title, ScreenStyle style) {
public FluidTerminalScreen(C menu, Inventory playerInventory, Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
import appeng.menu.implementations.InterfaceTerminalMenu;
import appeng.util.Platform;

public class InterfaceTerminalScreen extends AEBaseScreen<InterfaceTerminalMenu> {
public class InterfaceTerminalScreen<C extends InterfaceTerminalMenu> extends AEBaseScreen<C> {

private static final int GUI_WIDTH = 195;

Expand Down Expand Up @@ -135,7 +135,7 @@ public class InterfaceTerminalScreen extends AEBaseScreen<InterfaceTerminalMenu>
private AETextField searchField;
private int numLines = 0;

public InterfaceTerminalScreen(InterfaceTerminalMenu menu, Inventory playerInventory,
public InterfaceTerminalScreen(C menu, Inventory playerInventory,
Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);
this.scrollbar = widgets.addScrollBar("scrollbar");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
* This screen extends the item terminal with a crafting grid. The content of the crafting grid is stored server-side in
* the crafting terminal itself.
*/
public class CraftingTermScreen extends ItemTerminalScreen<CraftingTermMenu> {
public class CraftingTermScreen<C extends CraftingTermMenu> extends ItemTerminalScreen<C> {

public CraftingTermScreen(CraftingTermMenu menu, Inventory playerInventory,
public CraftingTermScreen(C menu, Inventory playerInventory,
Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
import appeng.menu.me.items.PatternTermMenu;
import appeng.menu.slot.PatternTermSlot;

public class PatternTermScreen extends ItemTerminalScreen<PatternTermMenu> {
public class PatternTermScreen<C extends PatternTermMenu> extends ItemTerminalScreen<C> {

private static final String MODES_TEXTURE = "guis/pattern_modes.png";

Expand All @@ -56,7 +56,7 @@ public class PatternTermScreen extends ItemTerminalScreen<PatternTermMenu> {
private final ActionButton fluidSubstitutionsDisabledBtn;
private final ActionButton convertItemsToFluidsBtn;

public PatternTermScreen(PatternTermMenu menu, Inventory playerInventory,
public PatternTermScreen(C menu, Inventory playerInventory,
Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);

Expand Down
11 changes: 4 additions & 7 deletions src/main/java/appeng/core/definitions/AEItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import appeng.api.ids.AEItemIds;
import appeng.api.storage.StorageChannels;
import appeng.api.util.AEColor;
import appeng.core.AEConfig;
import appeng.core.AppEng;
import appeng.core.CreativeTab;
import appeng.crafting.pattern.CraftingPatternItem;
Expand All @@ -60,13 +61,8 @@
import appeng.items.tools.BiometricCardItem;
import appeng.items.tools.MemoryCardItem;
import appeng.items.tools.NetworkToolItem;
import appeng.items.tools.powered.ChargedStaffItem;
import appeng.items.tools.powered.ColorApplicatorItem;
import appeng.items.tools.powered.EntropyManipulatorItem;
import appeng.items.tools.powered.MatterCannonItem;
import appeng.items.tools.powered.PortableCellItem;
import appeng.items.tools.powered.*;
import appeng.items.tools.powered.PortableCellItem.StorageTier;
import appeng.items.tools.powered.WirelessTerminalItem;
import appeng.items.tools.quartz.QuartzAxeItem;
import appeng.items.tools.quartz.QuartzCuttingKnifeItem;
import appeng.items.tools.quartz.QuartzHoeItem;
Expand Down Expand Up @@ -114,7 +110,8 @@ public final class AEItems {
///

public static final ItemDefinition<EntropyManipulatorItem> ENTROPY_MANIPULATOR = item(AEItemIds.ENTROPY_MANIPULATOR, p -> new EntropyManipulatorItem(p.stacksTo(1)));
public static final ItemDefinition<WirelessTerminalItem> WIRELESS_TERMINAL = item(AEItemIds.WIRELESS_TERMINAL, p -> new WirelessTerminalItem(p.stacksTo(1)));
public static final ItemDefinition<WirelessTerminalItem> WIRELESS_TERMINAL = item(AEItemIds.WIRELESS_TERMINAL, p -> new WirelessTerminalItem(AEConfig.instance().getWirelessTerminalBattery(), p.stacksTo(1)));
public static final ItemDefinition<WirelessTerminalItem> WIRELESS_CRAFTING_TERMINAL = item(AEItemIds.WIRELESS_CRAFTING_TERMINAL, p -> new WirelessCraftingTerminalItem(AEConfig.instance().getWirelessTerminalBattery(), p.stacksTo(1)));
public static final ItemDefinition<ChargedStaffItem> CHARGED_STAFF = item(AEItemIds.CHARGED_STAFF, p -> new ChargedStaffItem(p.stacksTo(1)));
public static final ItemDefinition<ColorApplicatorItem> COLOR_APPLICATOR = item(AEItemIds.COLOR_APPLICATOR, p -> new ColorApplicatorItem(p.stacksTo(1)));
public static final ItemDefinition<MatterCannonItem> MASS_CANNON = item(AEItemIds.MATTER_CANNON, p -> new MatterCannonItem(p.stacksTo(1)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,24 @@ protected void buildAE2CraftingRecipes(Consumer<FinishedRecipe> consumer) {
.unlockedBy("has_dense_energy_cell", has(AEBlocks.DENSE_ENERGY_CELL))
.unlockedBy("has_wireless_receiver", has(AEItems.WIRELESS_RECEIVER))
.save(consumer, AppEng.makeId("network/wireless_terminal"));
ShapedRecipeBuilder.shaped(AEItems.WIRELESS_CRAFTING_TERMINAL)
.pattern("a")
.pattern("b")
.pattern("c")
.define('a', AEItems.WIRELESS_RECEIVER)
.define('b', AEParts.CRAFTING_TERMINAL)
.define('c', AEBlocks.DENSE_ENERGY_CELL)
.unlockedBy("has_terminal", has(AEParts.CRAFTING_TERMINAL))
.unlockedBy("has_dense_energy_cell", has(AEBlocks.DENSE_ENERGY_CELL))
.unlockedBy("has_wireless_receiver", has(AEItems.WIRELESS_RECEIVER))
.save(consumer, AppEng.makeId("network/wireless_crafting_terminal"));
ShapelessRecipeBuilder.shapeless(AEItems.WIRELESS_CRAFTING_TERMINAL)
.requires(AEItems.WIRELESS_TERMINAL)
.requires(Items.CRAFTING_TABLE)
.requires(AEItems.CALCULATION_PROCESSOR)
.unlockedBy("has_terminal", has(AEItems.WIRELESS_TERMINAL))
.unlockedBy("has_calculation_processor", has(AEItems.CALCULATION_PROCESSOR))
.save(consumer, AppEng.makeId("network/upgrade_wireless_crafting_terminal"));

// ====================================================
// recipes/network/blocks
Expand Down
54 changes: 54 additions & 0 deletions src/main/java/appeng/helpers/IPatternTerminalHost.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package appeng.helpers;

import javax.annotation.Nullable;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;

import appeng.api.inventories.InternalInventory;
import appeng.api.networking.security.IActionHost;
import appeng.api.storage.ITerminalHost;
import appeng.util.inv.InternalInventoryHost;

public interface IPatternTerminalHost extends ITerminalHost, IActionHost, InternalInventoryHost {

/**
* Identifies the sub-inventory used by the pattern terminal to encode the inputs of crafting or processing
* patterns.
*/
ResourceLocation INV_CRAFTING = new ResourceLocation(
"appliedenergistics2:pattern_terminal_crafting");

/**
* Identifies the sub-inventory used by the pattern terminal to encode the outputs of crafting or processing
* patterns.
*/
ResourceLocation INV_OUTPUT = new ResourceLocation(
"appliedenergistics2:pattern_terminal_output");

@Nullable
InternalInventory getSubInventory(ResourceLocation id);

boolean isCraftingRecipe();

void setCraftingRecipe(final boolean craftingMode);

boolean isSubstitution();

void setSubstitution(final boolean canSubstitute);

boolean isFluidSubstitution();

void setFluidSubstitution(boolean canSubstitute);

default void fixCraftingRecipes() {
if (this.isCraftingRecipe()) {
for (int x = 0; x < this.getSubInventory(INV_CRAFTING).size(); x++) {
final ItemStack is = this.getSubInventory(INV_CRAFTING).getStackInSlot(x);
if (!is.isEmpty()) {
is.setCount(1);
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package appeng.helpers;

import org.jetbrains.annotations.Nullable;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;

import appeng.api.features.IWirelessTerminalHandler;
import appeng.api.inventories.ISegmentedInventory;
import appeng.api.inventories.InternalInventory;
import appeng.parts.reporting.CraftingTerminalPart;
import appeng.util.inv.AppEngInternalInventory;
import appeng.util.inv.InternalInventoryHost;

public class WirelessCraftingTerminalGuiObject extends WirelessTerminalGuiObject
implements ISegmentedInventory, InternalInventoryHost {// TODO maybe implement InternalInventoryHost elsewhere?
private final AppEngInternalInventory craftingGrid = new AppEngInternalInventory(this, 9);
private final Player player;

public WirelessCraftingTerminalGuiObject(IWirelessTerminalHandler wh, ItemStack is, Player ep, int inventorySlot) {
super(wh, is, ep, inventorySlot);
player = ep;
}

@Nullable
@Override
public InternalInventory getSubInventory(ResourceLocation id) {
if (id.equals(CraftingTerminalPart.INV_CRAFTING)) {
return craftingGrid;
} else
return null;
}

@Override
public void saveChanges() {// TODO save the content of the crafting grid

}

@Override
public void onChangeInventory(InternalInventory inv, int slot, ItemStack removedStack, ItemStack newStack) {

}

@Override
public boolean isRemote() {
return !(player instanceof ServerPlayer);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public boolean rangeCheck() {
return false;
}

private boolean testWap(final IWirelessAccessPoint wap) {
protected boolean testWap(final IWirelessAccessPoint wap) {
double rangeLimit = wap.getRange();
rangeLimit *= rangeLimit;

Expand Down
7 changes: 2 additions & 5 deletions src/main/java/appeng/init/InitMenuTypes.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,7 @@
import appeng.menu.me.crafting.CraftingCPUMenu;
import appeng.menu.me.crafting.CraftingStatusMenu;
import appeng.menu.me.fluids.FluidTerminalMenu;
import appeng.menu.me.items.CraftingTermMenu;
import appeng.menu.me.items.ItemTerminalMenu;
import appeng.menu.me.items.MEPortableCellMenu;
import appeng.menu.me.items.PatternTermMenu;
import appeng.menu.me.items.WirelessTermMenu;
import appeng.menu.me.items.*;
import appeng.menu.me.networktool.NetworkStatusMenu;
import appeng.menu.me.networktool.NetworkToolMenu;

Expand All @@ -73,6 +69,7 @@ public static void init(Registry<MenuType<?>> registry) {
CraftingCPUMenu.TYPE,
CraftingStatusMenu.TYPE,
CraftingTermMenu.TYPE,
WirelessCraftingTermMenu.TYPE,
DriveMenu.TYPE,
FormationPlaneMenu.ITEM_TYPE,
FormationPlaneMenu.FLUID_TYPE,
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/appeng/init/client/InitScreens.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,7 @@
import appeng.menu.me.crafting.CraftingCPUMenu;
import appeng.menu.me.crafting.CraftingStatusMenu;
import appeng.menu.me.fluids.FluidTerminalMenu;
import appeng.menu.me.items.CraftingTermMenu;
import appeng.menu.me.items.ItemTerminalMenu;
import appeng.menu.me.items.MEPortableCellMenu;
import appeng.menu.me.items.PatternTermMenu;
import appeng.menu.me.items.WirelessTermMenu;
import appeng.menu.me.items.*;
import appeng.menu.me.networktool.NetworkStatusMenu;
import appeng.menu.me.networktool.NetworkToolMenu;

Expand Down Expand Up @@ -157,7 +153,8 @@ public static void init() {
register(MolecularAssemblerMenu.TYPE, MolecularAssemblerScreen::new, "/screens/molecular_assembler.json");
register(CraftAmountMenu.TYPE, CraftAmountScreen::new, "/screens/craft_amount.json");
register(CraftConfirmMenu.TYPE, CraftConfirmScreen::new, "/screens/craft_confirm.json");
register(InterfaceTerminalMenu.TYPE, InterfaceTerminalScreen::new, "/screens/interface_terminal.json");
InitScreens.<InterfaceTerminalMenu, InterfaceTerminalScreen<InterfaceTerminalMenu>>register(
InterfaceTerminalMenu.TYPE, InterfaceTerminalScreen::new, "/screens/interface_terminal.json");
register(CraftingStatusMenu.TYPE, CraftingStatusScreen::new, "/screens/crafting_status.json");
register(SpatialAnchorMenu.TYPE, SpatialAnchorScreen::new, "/screens/spatial_anchor.json");

Expand All @@ -177,15 +174,19 @@ public static void init() {
register(SecurityStationMenu.TYPE,
SecurityStationScreen::new,
"/screens/terminals/security_station.json");
register(
InitScreens.<CraftingTermMenu, CraftingTermScreen<CraftingTermMenu>>register(
CraftingTermMenu.TYPE,
CraftingTermScreen::new,
"/screens/terminals/crafting_terminal.json");
register(
InitScreens.<WirelessCraftingTermMenu, CraftingTermScreen<WirelessCraftingTermMenu>>register(
WirelessCraftingTermMenu.TYPE,
CraftingTermScreen::new,
"/screens/terminals/crafting_terminal.json");
InitScreens.<PatternTermMenu, PatternTermScreen<PatternTermMenu>>register(
PatternTermMenu.TYPE,
PatternTermScreen::new,
"/screens/terminals/pattern_terminal.json");
register(
InitScreens.<FluidTerminalMenu, FluidTerminalScreen<FluidTerminalMenu>>register(
FluidTerminalMenu.TYPE,
FluidTerminalScreen::new,
"/screens/terminals/fluid_terminal.json");
Expand Down
1 change: 1 addition & 0 deletions src/main/java/appeng/init/internal/InitGridLinkables.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ private InitGridLinkables() {

public static void init() {
GridLinkables.register(AEItems.WIRELESS_TERMINAL, WirelessTerminalItem.LINKABLE_HANDLER);
GridLinkables.register(AEItems.WIRELESS_CRAFTING_TERMINAL, WirelessTerminalItem.LINKABLE_HANDLER);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ private InitWirelessTerminals() {
public static void init() {
WirelessTerminalsInternal.installOpener();
WirelessTerminals.register(AEItems.WIRELESS_TERMINAL, WirelessTerminalItem.TERMINAL_HANDLER);
WirelessTerminals.register(AEItems.WIRELESS_CRAFTING_TERMINAL, WirelessTerminalItem.TERMINAL_HANDLER);
}

}
Loading

0 comments on commit 306c964

Please sign in to comment.