1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Androids now have a seperate category

This commit is contained in:
TheBusyBiscuit 2020-06-14 18:58:38 +02:00
parent 2bead0cd3d
commit 4855f0da86
7 changed files with 103 additions and 41 deletions

View File

@ -46,6 +46,8 @@
* Auto Disenchanting is now a tiny bit faster
* Small performance improvements
* Dried Kelp Blocks can now be used as fuel for Tier 1 Androids
* Androids now have a seperate category in the Slimefun Guide
* Android Interface recipes now require steel ingots
#### Fixes
* Fixed Ore Washer recipes showing up twice
@ -59,6 +61,7 @@
* Fixed a missing texture in the Android Script Editor
* Fixed #1992
* Possibly fixed #1951
* Fixed tab completion for /sf give showing players instead of amounts
## Release Candidate 12 (27 May 2020)
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#12

View File

@ -1,6 +1,7 @@
package io.github.thebusybiscuit.slimefun4.core.commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@ -51,6 +52,9 @@ class SlimefunTabCompleter implements TabCompleter {
return null;
}
}
else if (args.length == 4 && args[0].equalsIgnoreCase("give")) {
return createReturnList(Arrays.asList("1", "2", "4", "8", "16", "32", "64"), args[3]);
}
else {
// Returning null will make it fallback to the default arguments (all online players)
return null;

View File

@ -0,0 +1,41 @@
package io.github.thebusybiscuit.slimefun4.implementation.items.androids;
import org.bukkit.inventory.ItemStack;
import io.github.thebusybiscuit.cscorelib2.item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
/**
* This enum covers all different fuel sources a {@link ProgrammableAndroid} can have.
*
* @author TheBusyBiscuit
*
*/
public enum AndroidFuelSource {
/**
* This {@link ProgrammableAndroid} runs on solid fuel, e.g. Wood or coal
*/
SOLID("", "&rThis Android runs on solid Fuel", "&re.g. Coal, Wood, etc..."),
/**
* This {@link ProgrammableAndroid} runs on liquid fuel, e.g. Fuel, Oil or Lava
*/
LIQUID("", "&rThis Android runs on liquid Fuel", "&re.g. Lava, Oil, Fuel, etc..."),
/**
* This {@link ProgrammableAndroid} runs on nuclear fuel, e.g. Uranium
*/
NUCLEAR("", "&rThis Android runs on radioactive Fuel", "&re.g. Uranium, Neptunium or Boosted Uranium");
private final String[] lore;
private AndroidFuelSource(String... lore) {
this.lore = lore;
}
public ItemStack getItem() {
return new CustomItem(SlimefunItems.COAL_GENERATOR, "&8\u21E9 &cFuel Input &8\u21E9", lore);
}
}

View File

@ -2,11 +2,9 @@ package io.github.thebusybiscuit.slimefun4.implementation.items.androids;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import org.apache.commons.lang.Validate;
@ -63,7 +61,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent
private static final int[] OUTPUT_BORDER = { 10, 11, 12, 13, 14, 19, 23, 28, 32, 37, 38, 39, 40, 41 };
private static final String DEFAULT_SCRIPT = "START-TURN_LEFT-REPEAT";
protected final Set<MachineFuel> fuelTypes = new HashSet<>();
protected final List<MachineFuel> fuelTypes = new ArrayList<>();
protected final String texture;
public ProgrammableAndroid(Category category, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
@ -173,6 +171,25 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent
*/
public abstract AndroidType getAndroidType();
/**
* This returns the {@link AndroidFuelSource} for this {@link ProgrammableAndroid}.
* It determines what kind of fuel is required to run it.
*
* @return The required type of fuel
*/
public AndroidFuelSource getFuelSource() {
switch (getTier()) {
case 1:
return AndroidFuelSource.SOLID;
case 2:
return AndroidFuelSource.LIQUID;
case 3:
return AndroidFuelSource.NUCLEAR;
default:
throw new IllegalStateException("Cannot convert the following Android tier to a fuel type: " + getTier());
}
}
@Override
public void preRegister() {
super.preRegister();
@ -533,7 +550,8 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent
}
private void registerDefaultFuelTypes() {
if (getTier() == 1) {
switch (getFuelSource()) {
case SOLID:
registerFuelType(new MachineFuel(800, new ItemStack(Material.COAL_BLOCK)));
registerFuelType(new MachineFuel(45, new ItemStack(Material.BLAZE_ROD)));
registerFuelType(new MachineFuel(70, new ItemStack(Material.DRIED_KELP_BLOCK)));
@ -551,16 +569,20 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent
for (Material mat : Tag.PLANKS.getValues()) {
registerFuelType(new MachineFuel(1, new ItemStack(mat)));
}
}
else if (getTier() == 2) {
break;
case LIQUID:
registerFuelType(new MachineFuel(100, new ItemStack(Material.LAVA_BUCKET)));
registerFuelType(new MachineFuel(200, SlimefunItems.BUCKET_OF_OIL));
registerFuelType(new MachineFuel(500, SlimefunItems.BUCKET_OF_FUEL));
}
else {
break;
case NUCLEAR:
registerFuelType(new MachineFuel(2500, SlimefunItems.URANIUM));
registerFuelType(new MachineFuel(1200, SlimefunItems.NEPTUNIUM));
registerFuelType(new MachineFuel(3000, SlimefunItems.BOOSTED_URANIUM));
break;
default:
throw new IllegalStateException("Unhandled Fuel Source: " + getFuelSource());
}
}
@ -740,7 +762,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent
if (fuel.test(item)) {
menu.consumeItem(43);
if (getTier() == 2) {
if (getFuelSource() == AndroidFuelSource.LIQUID) {
menu.pushItem(new ItemStack(Material.BUCKET), getOutputSlots());
}
@ -774,17 +796,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem implements Invent
});
}
ItemStack generator = SlimefunUtils.getCustomHead("9343ce58da54c79924a2c9331cfc417fe8ccbbea9be45a7ac85860a6c730");
if (getTier() == 1) {
preset.addItem(34, new CustomItem(generator, "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on solid Fuel", "&re.g. Coal, Wood, etc..."), ChestMenuUtils.getEmptyClickHandler());
}
else if (getTier() == 2) {
preset.addItem(34, new CustomItem(generator, "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on liquid Fuel", "&re.g. Lava, Oil, Fuel, etc..."), ChestMenuUtils.getEmptyClickHandler());
}
else {
preset.addItem(34, new CustomItem(generator, "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on radioactive Fuel", "&re.g. Uranium, Neptunium or Boosted Uranium"), ChestMenuUtils.getEmptyClickHandler());
}
preset.addItem(34, getFuelSource().getItem(), ChestMenuUtils.getEmptyClickHandler());
}
public void addItems(Block b, ItemStack... items) {

View File

@ -51,6 +51,7 @@ class DefaultCategories {
// Locked Categories
protected final LockedCategory electricity = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "electricity"), new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity"), 4, basicMachines.getKey());
protected final LockedCategory androids = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "androids"), new CustomItem(SlimefunItems.PROGRAMMABLE_ANDROID, "&cProgrammable Androids"), 4, basicMachines.getKey());
protected final Category cargo = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "cargo"), new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management"), 4, basicMachines.getKey());
protected final LockedCategory gps = new LockedCategory(new NamespacedKey(SlimefunPlugin.instance, "gps"), new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines"), 4, basicMachines.getKey());

View File

@ -2169,7 +2169,15 @@ public final class SlimefunItemSetup {
new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, null, SlimefunItems.GPS_TRANSMITTER, null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null})
.register(plugin);
new ProgrammableAndroid(categories.electricity, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID, RecipeType.ENHANCED_CRAFTING_TABLE,
new SlimefunItem(categories.androids, SlimefunItems.ANDROID_INTERFACE_ITEMS, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.BLUE_STAINED_GLASS), SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET})
.register(plugin);
new SlimefunItem(categories.androids, SlimefunItems.ANDROID_INTERFACE_FUEL, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET, new ItemStack(Material.RED_STAINED_GLASS), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET, SlimefunItems.STEEL_INGOT, SlimefunItems.PLASTIC_SHEET})
.register(plugin);
new ProgrammableAndroid(categories.androids, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) {
@Override
@ -2190,7 +2198,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new MinerAndroid(categories.electricity, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_MINER, RecipeType.ENHANCED_CRAFTING_TABLE,
new MinerAndroid(categories.androids, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_MINER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2206,7 +2214,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new FarmerAndroid(categories.electricity, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE,
new FarmerAndroid(categories.androids, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2222,7 +2230,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new WoodcutterAndroid(categories.electricity, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, RecipeType.ENHANCED_CRAFTING_TABLE,
new WoodcutterAndroid(categories.androids, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2238,7 +2246,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new FisherAndroid(categories.electricity, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE,
new FisherAndroid(categories.androids, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2254,7 +2262,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new ButcherAndroid(categories.electricity, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ButcherAndroid(categories.androids, (SlimefunItemStack) SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2270,15 +2278,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new SlimefunItem(categories.electricity, SlimefunItems.ANDROID_INTERFACE_ITEMS, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.BLUE_STAINED_GLASS), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET})
.register(plugin);
new SlimefunItem(categories.electricity, SlimefunItems.ANDROID_INTERFACE_FUEL, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, new ItemStack(Material.RED_STAINED_GLASS), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET})
.register(plugin);
new ProgrammableAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_2, RecipeType.ENHANCED_CRAFTING_TABLE,
new ProgrammableAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) {
@Override
@ -2299,7 +2299,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new FisherAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE,
new FisherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2315,7 +2315,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new ButcherAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ButcherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2331,7 +2331,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new AdvancedFarmerAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE,
new AdvancedFarmerAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2347,7 +2347,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new ProgrammableAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_3, RecipeType.ENHANCED_CRAFTING_TABLE,
new ProgrammableAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_3, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) {
@Override
@ -2368,7 +2368,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new FisherAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE,
new FisherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override
@ -2384,7 +2384,7 @@ public final class SlimefunItemSetup {
}
.register(plugin);
new ButcherAndroid(categories.electricity, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ButcherAndroid(categories.androids, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, RecipeType.ENHANCED_CRAFTING_TABLE,
new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) {
@Override

View File

@ -5,6 +5,7 @@ slimefun:
food: 'Food'
basic_machines: 'Basic Machines'
electricity: 'Energy and Electricity'
androids: 'Programmable Androids'
gps: 'GPS-based Machines'
armor: 'Armor'
magical_items: 'Magical Items'