mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-14 12:10:30 +00:00
Remove all references to the ComputerCraft class
Another ugly commit, not thrilled about it: - Move all config values to a separate Config class. - Replace ComputerCraft.log with class-specific loggers. - Replace ComputerCraft.MOD_ID with ComputerCraftAPI.MOD_ID
This commit is contained in:
parent
48285404b9
commit
4d50b48ea6
@ -14,13 +14,12 @@ import dan200.computercraft.api.pocket.PocketUpgradeSerialiser;
|
|||||||
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
|
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
|
||||||
import dan200.computercraft.api.turtle.event.TurtleRefuelEvent;
|
import dan200.computercraft.api.turtle.event.TurtleRefuelEvent;
|
||||||
import dan200.computercraft.impl.TurtleRefuelHandlers;
|
import dan200.computercraft.impl.TurtleRefuelHandlers;
|
||||||
import dan200.computercraft.shared.Config;
|
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
|
import dan200.computercraft.shared.config.ConfigSpec;
|
||||||
import dan200.computercraft.shared.peripheral.generic.data.FluidData;
|
import dan200.computercraft.shared.peripheral.generic.data.FluidData;
|
||||||
import dan200.computercraft.shared.peripheral.generic.methods.EnergyMethods;
|
import dan200.computercraft.shared.peripheral.generic.methods.EnergyMethods;
|
||||||
import dan200.computercraft.shared.peripheral.generic.methods.FluidMethods;
|
import dan200.computercraft.shared.peripheral.generic.methods.FluidMethods;
|
||||||
import dan200.computercraft.shared.peripheral.generic.methods.InventoryMethods;
|
import dan200.computercraft.shared.peripheral.generic.methods.InventoryMethods;
|
||||||
import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer;
|
|
||||||
import dan200.computercraft.shared.platform.NetworkHandler;
|
import dan200.computercraft.shared.platform.NetworkHandler;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
||||||
@ -31,56 +30,14 @@ import net.minecraftforge.fml.event.config.ModConfigEvent;
|
|||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.registries.NewRegistryEvent;
|
import net.minecraftforge.registries.NewRegistryEvent;
|
||||||
import net.minecraftforge.registries.RegistryBuilder;
|
import net.minecraftforge.registries.RegistryBuilder;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.OptionalInt;
|
import java.util.OptionalInt;
|
||||||
|
|
||||||
@Mod(ComputerCraft.MOD_ID)
|
@Mod(ComputerCraftAPI.MOD_ID)
|
||||||
@Mod.EventBusSubscriber(modid = ComputerCraft.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
@Mod.EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||||
public final class ComputerCraft {
|
public final class ComputerCraft {
|
||||||
public static final String MOD_ID = "computercraft";
|
|
||||||
|
|
||||||
public static int computerSpaceLimit = 1000 * 1000;
|
|
||||||
public static int floppySpaceLimit = 125 * 1000;
|
|
||||||
public static boolean commandRequireCreative = true;
|
|
||||||
|
|
||||||
public static int computerThreads = 1;
|
|
||||||
|
|
||||||
public static boolean enableCommandBlock = false;
|
|
||||||
public static int modemRange = 64;
|
|
||||||
public static int modemHighAltitudeRange = 384;
|
|
||||||
public static int modemRangeDuringStorm = 64;
|
|
||||||
public static int modemHighAltitudeRangeDuringStorm = 384;
|
|
||||||
public static int maxNotesPerTick = 8;
|
|
||||||
public static MonitorRenderer monitorRenderer = MonitorRenderer.BEST;
|
|
||||||
public static int monitorDistance = 65;
|
|
||||||
public static long monitorBandwidth = 1_000_000;
|
|
||||||
|
|
||||||
public static boolean turtlesNeedFuel = true;
|
|
||||||
public static int turtleFuelLimit = 20000;
|
|
||||||
public static int advancedTurtleFuelLimit = 100000;
|
|
||||||
public static boolean turtlesObeyBlockProtection = true;
|
|
||||||
public static boolean turtlesCanPush = true;
|
|
||||||
|
|
||||||
public static int computerTermWidth = 51;
|
|
||||||
public static int computerTermHeight = 19;
|
|
||||||
|
|
||||||
public static final int turtleTermWidth = 39;
|
|
||||||
public static final int turtleTermHeight = 13;
|
|
||||||
|
|
||||||
public static int pocketTermWidth = 26;
|
|
||||||
public static int pocketTermHeight = 20;
|
|
||||||
|
|
||||||
public static int monitorWidth = 8;
|
|
||||||
public static int monitorHeight = 6;
|
|
||||||
|
|
||||||
public static int uploadNagDelay = 5;
|
|
||||||
|
|
||||||
public static final Logger log = LoggerFactory.getLogger(MOD_ID);
|
|
||||||
|
|
||||||
public ComputerCraft() {
|
public ComputerCraft() {
|
||||||
Config.setup();
|
ConfigSpec.setup();
|
||||||
ModRegistry.register();
|
ModRegistry.register();
|
||||||
|
|
||||||
// Register a fallback handler for the turtle refuel event.
|
// Register a fallback handler for the turtle refuel event.
|
||||||
@ -129,11 +86,11 @@ public final class ComputerCraft {
|
|||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void sync(ModConfigEvent.Loading event) {
|
public static void sync(ModConfigEvent.Loading event) {
|
||||||
Config.sync(event.getConfig());
|
ConfigSpec.sync(event.getConfig());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void sync(ModConfigEvent.Reloading event) {
|
public static void sync(ModConfigEvent.Reloading event) {
|
||||||
Config.sync(event.getConfig());
|
ConfigSpec.sync(event.getConfig());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
package dan200.computercraft;
|
package dan200.computercraft;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.detail.BlockReference;
|
import dan200.computercraft.api.detail.BlockReference;
|
||||||
import dan200.computercraft.api.detail.DetailRegistry;
|
import dan200.computercraft.api.detail.DetailRegistry;
|
||||||
import dan200.computercraft.api.detail.IDetailProvider;
|
import dan200.computercraft.api.detail.IDetailProvider;
|
||||||
@ -80,7 +81,7 @@ public final class ComputerCraftAPIImpl implements ComputerCraftAPIForgeService
|
|||||||
@Override
|
@Override
|
||||||
public String getInstalledVersion() {
|
public String getInstalledVersion() {
|
||||||
if (version != null) return version;
|
if (version != null) return version;
|
||||||
return version = ModList.get().getModContainerById(ComputerCraft.MOD_ID)
|
return version = ModList.get().getModContainerById(ComputerCraftAPI.MOD_ID)
|
||||||
.map(x -> x.getModInfo().getVersion().toString())
|
.map(x -> x.getModInfo().getVersion().toString())
|
||||||
.orElse("unknown");
|
.orElse("unknown");
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.client;
|
package dan200.computercraft.client;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.client.ComputerCraftAPIClient;
|
import dan200.computercraft.api.client.ComputerCraftAPIClient;
|
||||||
import dan200.computercraft.api.client.turtle.TurtleUpgradeModeller;
|
import dan200.computercraft.api.client.turtle.TurtleUpgradeModeller;
|
||||||
import dan200.computercraft.client.gui.*;
|
import dan200.computercraft.client.gui.*;
|
||||||
@ -57,12 +57,12 @@ public final class ClientRegistry {
|
|||||||
*/
|
*/
|
||||||
public static void register() {
|
public static void register() {
|
||||||
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.SPEAKER.get(), TurtleUpgradeModeller.sided(
|
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.SPEAKER.get(), TurtleUpgradeModeller.sided(
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_speaker_left"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_speaker_left"),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_speaker_right")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_speaker_right")
|
||||||
));
|
));
|
||||||
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.WORKBENCH.get(), TurtleUpgradeModeller.sided(
|
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.WORKBENCH.get(), TurtleUpgradeModeller.sided(
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_crafting_table_left"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_crafting_table_left"),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_crafting_table_right")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_crafting_table_right")
|
||||||
));
|
));
|
||||||
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.WIRELESS_MODEM_NORMAL.get(), new TurtleModemModeller(false));
|
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.WIRELESS_MODEM_NORMAL.get(), new TurtleModemModeller(false));
|
||||||
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.WIRELESS_MODEM_ADVANCED.get(), new TurtleModemModeller(true));
|
ComputerCraftAPIClient.registerTurtleUpgradeModeller(ModRegistry.TurtleSerialisers.WIRELESS_MODEM_ADVANCED.get(), new TurtleModemModeller(true));
|
||||||
@ -97,7 +97,7 @@ public final class ClientRegistry {
|
|||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private static void registerItemProperty(String name, ItemPropertyFunction getter, Supplier<? extends Item>... items) {
|
private static void registerItemProperty(String name, ItemPropertyFunction getter, Supplier<? extends Item>... items) {
|
||||||
var id = new ResourceLocation(ComputerCraft.MOD_ID, name);
|
var id = new ResourceLocation(ComputerCraftAPI.MOD_ID, name);
|
||||||
for (var item : items) ItemProperties.register(item.get(), id, getter);
|
for (var item : items) ItemProperties.register(item.get(), id, getter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,15 +125,10 @@ public final class ClientRegistry {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public static void registerExtraModels(Consumer<ResourceLocation> register) {
|
public static void registerExtraModels(Consumer<ResourceLocation> register) {
|
||||||
for (var model : EXTRA_MODELS) register.accept(new ResourceLocation(ComputerCraft.MOD_ID, model));
|
for (var model : EXTRA_MODELS) register.accept(new ResourceLocation(ComputerCraftAPI.MOD_ID, model));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerItemColours(BiConsumer<ItemColor, ItemLike> register) {
|
public static void registerItemColours(BiConsumer<ItemColor, ItemLike> register) {
|
||||||
if (ModRegistry.Items.DISK == null || ModRegistry.Blocks.TURTLE_NORMAL == null) {
|
|
||||||
ComputerCraft.log.warn("Block/item registration has failed. Skipping registration of item colours.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
register.accept(
|
register.accept(
|
||||||
(stack, layer) -> layer == 1 ? ((ItemDisk) stack.getItem()).getColour(stack) : 0xFFFFFF,
|
(stack, layer) -> layer == 1 ? ((ItemDisk) stack.getItem()).getColour(stack) : 0xFFFFFF,
|
||||||
ModRegistry.Items.DISK.get()
|
ModRegistry.Items.DISK.get()
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.client;
|
package dan200.computercraft.client;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.client.sound.SpeakerSound;
|
import dan200.computercraft.client.sound.SpeakerSound;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.client.event.*;
|
import net.minecraftforge.client.event.*;
|
||||||
@ -18,7 +18,7 @@ import net.minecraftforge.fml.common.Mod;
|
|||||||
/**
|
/**
|
||||||
* Forge-specific dispatch for {@link ClientHooks}.
|
* Forge-specific dispatch for {@link ClientHooks}.
|
||||||
*/
|
*/
|
||||||
@Mod.EventBusSubscriber(modid = ComputerCraft.MOD_ID, value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(modid = ComputerCraftAPI.MOD_ID, value = Dist.CLIENT)
|
||||||
public final class ForgeClientHooks {
|
public final class ForgeClientHooks {
|
||||||
private ForgeClientHooks() {
|
private ForgeClientHooks() {
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.client.gui;
|
package dan200.computercraft.client.gui;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.client.gui.widgets.ComputerSidebar;
|
import dan200.computercraft.client.gui.widgets.ComputerSidebar;
|
||||||
import dan200.computercraft.client.gui.widgets.DynamicImageButton;
|
import dan200.computercraft.client.gui.widgets.DynamicImageButton;
|
||||||
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
||||||
@ -17,6 +16,7 @@ import dan200.computercraft.shared.computer.core.InputHandler;
|
|||||||
import dan200.computercraft.shared.computer.inventory.ContainerComputerBase;
|
import dan200.computercraft.shared.computer.inventory.ContainerComputerBase;
|
||||||
import dan200.computercraft.shared.computer.upload.FileUpload;
|
import dan200.computercraft.shared.computer.upload.FileUpload;
|
||||||
import dan200.computercraft.shared.computer.upload.UploadResult;
|
import dan200.computercraft.shared.computer.upload.UploadResult;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.server.UploadFileMessage;
|
import dan200.computercraft.shared.network.server.UploadFileMessage;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.Util;
|
import net.minecraft.Util;
|
||||||
@ -25,6 +25,8 @@ import net.minecraft.network.chat.Component;
|
|||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -39,6 +41,8 @@ import java.util.concurrent.TimeUnit;
|
|||||||
import static dan200.computercraft.core.util.Nullability.assertNonNull;
|
import static dan200.computercraft.core.util.Nullability.assertNonNull;
|
||||||
|
|
||||||
public abstract class ComputerScreenBase<T extends ContainerComputerBase> extends AbstractContainerScreen<T> {
|
public abstract class ComputerScreenBase<T extends ContainerComputerBase> extends AbstractContainerScreen<T> {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(ComputerScreenBase.class);
|
||||||
|
|
||||||
private static final Component OK = Component.translatable("gui.ok");
|
private static final Component OK = Component.translatable("gui.ok");
|
||||||
private static final Component NO_RESPONSE_TITLE = Component.translatable("gui.computercraft.upload.no_response");
|
private static final Component NO_RESPONSE_TITLE = Component.translatable("gui.computercraft.upload.no_response");
|
||||||
private static final Component NO_RESPONSE_MSG = Component.translatable("gui.computercraft.upload.no_response.msg",
|
private static final Component NO_RESPONSE_MSG = Component.translatable("gui.computercraft.upload.no_response.msg",
|
||||||
@ -178,7 +182,7 @@ public abstract class ComputerScreenBase<T extends ContainerComputerBase> extend
|
|||||||
|
|
||||||
toUpload.add(new FileUpload(name, buffer, digest));
|
toUpload.add(new FileUpload(name, buffer, digest));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
ComputerCraft.log.error("Failed uploading files", e);
|
LOG.error("Failed uploading files", e);
|
||||||
alert(UploadResult.FAILED_TITLE, Component.translatable("gui.computercraft.upload.failed.generic", "Cannot compute checksum"));
|
alert(UploadResult.FAILED_TITLE, Component.translatable("gui.computercraft.upload.failed.generic", "Cannot compute checksum"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -194,8 +198,8 @@ public abstract class ComputerScreenBase<T extends ContainerComputerBase> extend
|
|||||||
public void uploadResult(UploadResult result, @Nullable Component message) {
|
public void uploadResult(UploadResult result, @Nullable Component message) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case QUEUED -> {
|
case QUEUED -> {
|
||||||
if (ComputerCraft.uploadNagDelay > 0) {
|
if (Config.uploadNagDelay > 0) {
|
||||||
uploadNagDeadline = Util.getNanos() + TimeUnit.SECONDS.toNanos(ComputerCraft.uploadNagDelay);
|
uploadNagDeadline = Util.getNanos() + TimeUnit.SECONDS.toNanos(Config.uploadNagDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case CONSUMED -> uploadNagDeadline = Long.MAX_VALUE;
|
case CONSUMED -> uploadNagDeadline = Long.MAX_VALUE;
|
||||||
|
@ -7,7 +7,7 @@ package dan200.computercraft.client.gui;
|
|||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.client.gui.widgets.ComputerSidebar;
|
import dan200.computercraft.client.gui.widgets.ComputerSidebar;
|
||||||
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
import dan200.computercraft.client.gui.widgets.WidgetTerminal;
|
||||||
import dan200.computercraft.client.render.ComputerBorderRenderer;
|
import dan200.computercraft.client.render.ComputerBorderRenderer;
|
||||||
@ -20,8 +20,8 @@ import net.minecraft.world.entity.player.Inventory;
|
|||||||
import static dan200.computercraft.shared.turtle.inventory.ContainerTurtle.*;
|
import static dan200.computercraft.shared.turtle.inventory.ContainerTurtle.*;
|
||||||
|
|
||||||
public class GuiTurtle extends ComputerScreenBase<ContainerTurtle> {
|
public class GuiTurtle extends ComputerScreenBase<ContainerTurtle> {
|
||||||
private static final ResourceLocation BACKGROUND_NORMAL = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/turtle_normal.png");
|
private static final ResourceLocation BACKGROUND_NORMAL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/turtle_normal.png");
|
||||||
private static final ResourceLocation BACKGROUND_ADVANCED = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/turtle_advanced.png");
|
private static final ResourceLocation BACKGROUND_ADVANCED = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/turtle_advanced.png");
|
||||||
|
|
||||||
private static final int TEX_WIDTH = 254;
|
private static final int TEX_WIDTH = 254;
|
||||||
private static final int TEX_HEIGHT = 217;
|
private static final int TEX_HEIGHT = 217;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package dan200.computercraft.client.gui.widgets;
|
package dan200.computercraft.client.gui.widgets;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.client.render.ComputerBorderRenderer;
|
import dan200.computercraft.client.render.ComputerBorderRenderer;
|
||||||
import dan200.computercraft.shared.computer.core.InputHandler;
|
import dan200.computercraft.shared.computer.core.InputHandler;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
@ -24,7 +24,7 @@ import java.util.function.Consumer;
|
|||||||
* Registers buttons to interact with a computer.
|
* Registers buttons to interact with a computer.
|
||||||
*/
|
*/
|
||||||
public final class ComputerSidebar {
|
public final class ComputerSidebar {
|
||||||
private static final ResourceLocation TEXTURE = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/buttons.png");
|
private static final ResourceLocation TEXTURE = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/buttons.png");
|
||||||
|
|
||||||
private static final int TEX_SIZE = 64;
|
private static final int TEX_SIZE = 64;
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.client.pocket;
|
package dan200.computercraft.client.pocket;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerState;
|
import dan200.computercraft.shared.computer.core.ComputerState;
|
||||||
import dan200.computercraft.shared.computer.terminal.NetworkedTerminal;
|
import dan200.computercraft.shared.computer.terminal.NetworkedTerminal;
|
||||||
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -28,7 +28,7 @@ public class PocketComputerData {
|
|||||||
private int lightColour = -1;
|
private int lightColour = -1;
|
||||||
|
|
||||||
public PocketComputerData(boolean colour) {
|
public PocketComputerData(boolean colour) {
|
||||||
terminal = new NetworkedTerminal(ComputerCraft.pocketTermWidth, ComputerCraft.pocketTermHeight, colour);
|
terminal = new NetworkedTerminal(Config.pocketTermWidth, Config.pocketTermHeight, colour);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLightState() {
|
public int getLightState() {
|
||||||
|
@ -8,17 +8,17 @@ package dan200.computercraft.client.render;
|
|||||||
import com.mojang.blaze3d.vertex.Tesselator;
|
import com.mojang.blaze3d.vertex.Tesselator;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
import com.mojang.math.Matrix4f;
|
import com.mojang.math.Matrix4f;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
|
||||||
public class ComputerBorderRenderer {
|
public class ComputerBorderRenderer {
|
||||||
public static final ResourceLocation BACKGROUND_NORMAL = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/corners_normal.png");
|
public static final ResourceLocation BACKGROUND_NORMAL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/corners_normal.png");
|
||||||
public static final ResourceLocation BACKGROUND_ADVANCED = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/corners_advanced.png");
|
public static final ResourceLocation BACKGROUND_ADVANCED = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/corners_advanced.png");
|
||||||
public static final ResourceLocation BACKGROUND_COMMAND = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/corners_command.png");
|
public static final ResourceLocation BACKGROUND_COMMAND = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/corners_command.png");
|
||||||
public static final ResourceLocation BACKGROUND_COLOUR = new ResourceLocation(ComputerCraft.MOD_ID, "textures/gui/corners_colour.png");
|
public static final ResourceLocation BACKGROUND_COLOUR = new ResourceLocation(ComputerCraftAPI.MOD_ID, "textures/gui/corners_colour.png");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The margin between the terminal and its border.
|
* The margin between the terminal and its border.
|
||||||
|
@ -7,7 +7,7 @@ package dan200.computercraft.client.render;
|
|||||||
|
|
||||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.client.render.text.FixedWidthFontRenderer;
|
import dan200.computercraft.client.render.text.FixedWidthFontRenderer;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import net.minecraft.client.renderer.RenderStateShard;
|
import net.minecraft.client.renderer.RenderStateShard;
|
||||||
@ -63,7 +63,7 @@ public class RenderTypes {
|
|||||||
load.accept(
|
load.accept(
|
||||||
new MonitorTextureBufferShader(
|
new MonitorTextureBufferShader(
|
||||||
resources,
|
resources,
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "monitor_tbo"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "monitor_tbo"),
|
||||||
MONITOR_TBO.format()
|
MONITOR_TBO.format()
|
||||||
),
|
),
|
||||||
x -> monitorTboShader = (MonitorTextureBufferShader) x
|
x -> monitorTboShader = (MonitorTextureBufferShader) x
|
||||||
|
@ -15,7 +15,6 @@ import com.mojang.blaze3d.vertex.VertexConsumer;
|
|||||||
import com.mojang.math.Matrix3f;
|
import com.mojang.math.Matrix3f;
|
||||||
import com.mojang.math.Matrix4f;
|
import com.mojang.math.Matrix4f;
|
||||||
import com.mojang.math.Vector3f;
|
import com.mojang.math.Vector3f;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.client.FrameInfo;
|
import dan200.computercraft.client.FrameInfo;
|
||||||
import dan200.computercraft.client.render.monitor.MonitorRenderState;
|
import dan200.computercraft.client.render.monitor.MonitorRenderState;
|
||||||
import dan200.computercraft.client.render.text.DirectFixedWidthFontRenderer;
|
import dan200.computercraft.client.render.text.DirectFixedWidthFontRenderer;
|
||||||
@ -23,6 +22,7 @@ import dan200.computercraft.client.render.text.FixedWidthFontRenderer;
|
|||||||
import dan200.computercraft.client.util.DirectBuffers;
|
import dan200.computercraft.client.util.DirectBuffers;
|
||||||
import dan200.computercraft.client.util.DirectVertexBuffer;
|
import dan200.computercraft.client.util.DirectVertexBuffer;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.integration.ShaderMod;
|
import dan200.computercraft.shared.integration.ShaderMod;
|
||||||
import dan200.computercraft.shared.peripheral.monitor.ClientMonitor;
|
import dan200.computercraft.shared.peripheral.monitor.ClientMonitor;
|
||||||
import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer;
|
import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer;
|
||||||
@ -36,6 +36,8 @@ import org.lwjgl.opengl.GL;
|
|||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
import org.lwjgl.opengl.GL20;
|
import org.lwjgl.opengl.GL20;
|
||||||
import org.lwjgl.opengl.GL31;
|
import org.lwjgl.opengl.GL31;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@ -46,6 +48,8 @@ import static dan200.computercraft.client.render.text.FixedWidthFontRenderer.FON
|
|||||||
import static dan200.computercraft.core.util.Nullability.assertNonNull;
|
import static dan200.computercraft.core.util.Nullability.assertNonNull;
|
||||||
|
|
||||||
public class TileEntityMonitorRenderer implements BlockEntityRenderer<TileMonitor> {
|
public class TileEntityMonitorRenderer implements BlockEntityRenderer<TileMonitor> {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(TileEntityMonitorRenderer.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link TileMonitor#RENDER_MARGIN}, but a tiny bit of additional padding to ensure that there is no space between
|
* {@link TileMonitor#RENDER_MARGIN}, but a tiny bit of additional padding to ensure that there is no space between
|
||||||
* the monitor frame and contents.
|
* the monitor frame and contents.
|
||||||
@ -254,7 +258,7 @@ public class TileEntityMonitorRenderer implements BlockEntityRenderer<TileMonito
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getViewDistance() {
|
public int getViewDistance() {
|
||||||
return ComputerCraft.monitorDistance;
|
return Config.monitorDistance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -264,19 +268,19 @@ public class TileEntityMonitorRenderer implements BlockEntityRenderer<TileMonito
|
|||||||
* @return The current renderer. Will not return {@link MonitorRenderer#BEST}.
|
* @return The current renderer. Will not return {@link MonitorRenderer#BEST}.
|
||||||
*/
|
*/
|
||||||
public static MonitorRenderer currentRenderer() {
|
public static MonitorRenderer currentRenderer() {
|
||||||
var current = ComputerCraft.monitorRenderer;
|
var current = Config.monitorRenderer;
|
||||||
if (current == MonitorRenderer.BEST) current = ComputerCraft.monitorRenderer = bestRenderer();
|
if (current == MonitorRenderer.BEST) current = Config.monitorRenderer = bestRenderer();
|
||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MonitorRenderer bestRenderer() {
|
private static MonitorRenderer bestRenderer() {
|
||||||
if (!GL.getCapabilities().OpenGL31) {
|
if (!GL.getCapabilities().OpenGL31) {
|
||||||
ComputerCraft.log.warn("Texture buffers are not supported on your graphics card. Falling back to VBO monitor renderer.");
|
LOG.warn("Texture buffers are not supported on your graphics card. Falling back to VBO monitor renderer.");
|
||||||
return MonitorRenderer.VBO;
|
return MonitorRenderer.VBO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShaderMod.INSTANCE.isShaderMod()) {
|
if (ShaderMod.INSTANCE.isShaderMod()) {
|
||||||
ComputerCraft.log.warn("Optifine is loaded, assuming shaders are being used. Falling back to VBO monitor renderer.");
|
LOG.warn("Optifine is loaded, assuming shaders are being used. Falling back to VBO monitor renderer.");
|
||||||
return MonitorRenderer.VBO;
|
return MonitorRenderer.VBO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ package dan200.computercraft.client.render;
|
|||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
import com.mojang.math.Vector3f;
|
import com.mojang.math.Vector3f;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.turtle.TurtleSide;
|
import dan200.computercraft.api.turtle.TurtleSide;
|
||||||
import dan200.computercraft.client.turtle.TurtleUpgradeModellers;
|
import dan200.computercraft.client.turtle.TurtleUpgradeModellers;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
@ -36,8 +36,8 @@ import java.util.List;
|
|||||||
public class TileEntityTurtleRenderer implements BlockEntityRenderer<TileTurtle> {
|
public class TileEntityTurtleRenderer implements BlockEntityRenderer<TileTurtle> {
|
||||||
private static final ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation("computercraft:turtle_normal", "inventory");
|
private static final ModelResourceLocation NORMAL_TURTLE_MODEL = new ModelResourceLocation("computercraft:turtle_normal", "inventory");
|
||||||
private static final ModelResourceLocation ADVANCED_TURTLE_MODEL = new ModelResourceLocation("computercraft:turtle_advanced", "inventory");
|
private static final ModelResourceLocation ADVANCED_TURTLE_MODEL = new ModelResourceLocation("computercraft:turtle_advanced", "inventory");
|
||||||
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_colour");
|
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour");
|
||||||
private static final ResourceLocation ELF_OVERLAY_MODEL = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_elf_overlay");
|
private static final ResourceLocation ELF_OVERLAY_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_elf_overlay");
|
||||||
|
|
||||||
private final RandomSource random = RandomSource.create(0);
|
private final RandomSource random = RandomSource.create(0);
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ package dan200.computercraft.client.render;
|
|||||||
import com.google.gson.JsonDeserializationContext;
|
import com.google.gson.JsonDeserializationContext;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.client.model.turtle.TurtleModel;
|
import dan200.computercraft.client.model.turtle.TurtleModel;
|
||||||
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
import net.minecraft.client.renderer.block.model.ItemOverrides;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
@ -25,7 +25,7 @@ import java.util.Set;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public final class TurtleModelLoader implements IGeometryLoader<TurtleModelLoader.Unbaked> {
|
public final class TurtleModelLoader implements IGeometryLoader<TurtleModelLoader.Unbaked> {
|
||||||
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_colour");
|
private static final ResourceLocation COLOUR_TURTLE_MODEL = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_colour");
|
||||||
|
|
||||||
public static final TurtleModelLoader INSTANCE = new TurtleModelLoader();
|
public static final TurtleModelLoader INSTANCE = new TurtleModelLoader();
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.client.sound;
|
package dan200.computercraft.client.sound;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.core.util.Nullability;
|
import dan200.computercraft.core.util.Nullability;
|
||||||
import dan200.computercraft.shared.peripheral.speaker.SpeakerPosition;
|
import dan200.computercraft.shared.peripheral.speaker.SpeakerPosition;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
@ -18,7 +18,7 @@ import javax.annotation.Nullable;
|
|||||||
* An instance of a speaker, which is either playing a {@link DfpwmStream} stream or a normal sound.
|
* An instance of a speaker, which is either playing a {@link DfpwmStream} stream or a normal sound.
|
||||||
*/
|
*/
|
||||||
public class SpeakerInstance {
|
public class SpeakerInstance {
|
||||||
public static final ResourceLocation DFPWM_STREAM = new ResourceLocation(ComputerCraft.MOD_ID, "speaker.dfpwm_fake_audio_should_not_be_played");
|
public static final ResourceLocation DFPWM_STREAM = new ResourceLocation(ComputerCraftAPI.MOD_ID, "speaker.dfpwm_fake_audio_should_not_be_played");
|
||||||
|
|
||||||
private @Nullable DfpwmStream currentStream;
|
private @Nullable DfpwmStream currentStream;
|
||||||
private @Nullable SpeakerSound sound;
|
private @Nullable SpeakerSound sound;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.client.turtle;
|
package dan200.computercraft.client.turtle;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.client.TransformedModel;
|
import dan200.computercraft.api.client.TransformedModel;
|
||||||
import dan200.computercraft.api.client.turtle.TurtleUpgradeModeller;
|
import dan200.computercraft.api.client.turtle.TurtleUpgradeModeller;
|
||||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||||
@ -22,15 +22,15 @@ public class TurtleModemModeller implements TurtleUpgradeModeller<TurtleModem> {
|
|||||||
|
|
||||||
public TurtleModemModeller(boolean advanced) {
|
public TurtleModemModeller(boolean advanced) {
|
||||||
if (advanced) {
|
if (advanced) {
|
||||||
leftOffModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_advanced_off_left");
|
leftOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_off_left");
|
||||||
rightOffModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_advanced_off_right");
|
rightOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_off_right");
|
||||||
leftOnModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_advanced_on_left");
|
leftOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_on_left");
|
||||||
rightOnModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_advanced_on_right");
|
rightOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_advanced_on_right");
|
||||||
} else {
|
} else {
|
||||||
leftOffModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_normal_off_left");
|
leftOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_off_left");
|
||||||
rightOffModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_normal_off_right");
|
rightOffModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_off_right");
|
||||||
leftOnModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_normal_on_left");
|
leftOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_on_left");
|
||||||
rightOnModel = new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_modem_normal_on_right");
|
rightOnModel = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_modem_normal_on_right");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import dan200.computercraft.shared.computer.blocks.BlockComputer;
|
import dan200.computercraft.shared.computer.blocks.BlockComputer;
|
||||||
import dan200.computercraft.shared.peripheral.diskdrive.BlockDiskDrive;
|
import dan200.computercraft.shared.peripheral.diskdrive.BlockDiskDrive;
|
||||||
@ -39,27 +39,27 @@ import static net.minecraft.data.models.model.TextureMapping.getBlockTexture;
|
|||||||
|
|
||||||
class BlockModelGenerator {
|
class BlockModelGenerator {
|
||||||
private static final ModelTemplate MONITOR_BASE = new ModelTemplate(
|
private static final ModelTemplate MONITOR_BASE = new ModelTemplate(
|
||||||
Optional.of(new ResourceLocation(ComputerCraft.MOD_ID, "block/monitor_base")),
|
Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/monitor_base")),
|
||||||
Optional.empty(),
|
Optional.empty(),
|
||||||
TextureSlot.FRONT, TextureSlot.SIDE, TextureSlot.TOP, TextureSlot.BACK
|
TextureSlot.FRONT, TextureSlot.SIDE, TextureSlot.TOP, TextureSlot.BACK
|
||||||
);
|
);
|
||||||
private static final ModelTemplate MODEM = new ModelTemplate(
|
private static final ModelTemplate MODEM = new ModelTemplate(
|
||||||
Optional.of(new ResourceLocation(ComputerCraft.MOD_ID, "block/modem")),
|
Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/modem")),
|
||||||
Optional.empty(),
|
Optional.empty(),
|
||||||
TextureSlot.FRONT, TextureSlot.BACK
|
TextureSlot.FRONT, TextureSlot.BACK
|
||||||
);
|
);
|
||||||
private static final ModelTemplate TURTLE = new ModelTemplate(
|
private static final ModelTemplate TURTLE = new ModelTemplate(
|
||||||
Optional.of(new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_base")),
|
Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_base")),
|
||||||
Optional.empty(),
|
Optional.empty(),
|
||||||
TextureSlot.TEXTURE
|
TextureSlot.TEXTURE
|
||||||
);
|
);
|
||||||
private static final ModelTemplate TURTLE_UPGRADE_LEFT = new ModelTemplate(
|
private static final ModelTemplate TURTLE_UPGRADE_LEFT = new ModelTemplate(
|
||||||
Optional.of(new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_upgrade_base_left")),
|
Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_upgrade_base_left")),
|
||||||
Optional.of("_left"),
|
Optional.of("_left"),
|
||||||
TextureSlot.TEXTURE
|
TextureSlot.TEXTURE
|
||||||
);
|
);
|
||||||
private static final ModelTemplate TURTLE_UPGRADE_RIGHT = new ModelTemplate(
|
private static final ModelTemplate TURTLE_UPGRADE_RIGHT = new ModelTemplate(
|
||||||
Optional.of(new ResourceLocation(ComputerCraft.MOD_ID, "block/turtle_upgrade_base_right")),
|
Optional.of(new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/turtle_upgrade_base_right")),
|
||||||
Optional.of("_left"),
|
Optional.of("_left"),
|
||||||
TextureSlot.TEXTURE
|
TextureSlot.TEXTURE
|
||||||
);
|
);
|
||||||
@ -181,10 +181,10 @@ class BlockModelGenerator {
|
|||||||
generators.blockStateOutput.accept(MultiVariantGenerator.multiVariant(fullBlock)
|
generators.blockStateOutput.accept(MultiVariantGenerator.multiVariant(fullBlock)
|
||||||
.with(createModelDispatch(BlockWiredModemFull.MODEM_ON, BlockWiredModemFull.PERIPHERAL_ON, (on, peripheral) -> {
|
.with(createModelDispatch(BlockWiredModemFull.MODEM_ON, BlockWiredModemFull.PERIPHERAL_ON, (on, peripheral) -> {
|
||||||
var suffix = (on ? "_on" : "_off") + (peripheral ? "_peripheral" : "");
|
var suffix = (on ? "_on" : "_off") + (peripheral ? "_peripheral" : "");
|
||||||
var faceTexture = new ResourceLocation(ComputerCraft.MOD_ID, "block/wired_modem_face" + (peripheral ? "_peripheral" : "") + (on ? "_on" : ""));
|
var faceTexture = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/wired_modem_face" + (peripheral ? "_peripheral" : "") + (on ? "_on" : ""));
|
||||||
|
|
||||||
// TODO: Do this somewhere more elegant!
|
// TODO: Do this somewhere more elegant!
|
||||||
modemModel(generators, new ResourceLocation(ComputerCraft.MOD_ID, "block/wired_modem" + suffix), faceTexture);
|
modemModel(generators, new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/wired_modem" + suffix), faceTexture);
|
||||||
|
|
||||||
return ModelTemplates.CUBE_ALL.create(
|
return ModelTemplates.CUBE_ALL.create(
|
||||||
getModelLocation(fullBlock, suffix),
|
getModelLocation(fullBlock, suffix),
|
||||||
@ -194,7 +194,7 @@ class BlockModelGenerator {
|
|||||||
})));
|
})));
|
||||||
|
|
||||||
generators.delegateItemModel(fullBlock, getModelLocation(fullBlock, "_off"));
|
generators.delegateItemModel(fullBlock, getModelLocation(fullBlock, "_off"));
|
||||||
generators.delegateItemModel(ModRegistry.Items.WIRED_MODEM.get(), new ResourceLocation(ComputerCraft.MOD_ID, "block/wired_modem_off"));
|
generators.delegateItemModel(ModRegistry.Items.WIRED_MODEM.get(), new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/wired_modem_off"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ResourceLocation modemModel(BlockModelGenerators generators, ResourceLocation name, ResourceLocation texture) {
|
private static ResourceLocation modemModel(BlockModelGenerators generators, ResourceLocation name, ResourceLocation texture) {
|
||||||
@ -202,7 +202,7 @@ class BlockModelGenerator {
|
|||||||
name,
|
name,
|
||||||
new TextureMapping()
|
new TextureMapping()
|
||||||
.put(TextureSlot.FRONT, texture)
|
.put(TextureSlot.FRONT, texture)
|
||||||
.put(TextureSlot.BACK, new ResourceLocation(ComputerCraft.MOD_ID, "block/modem_back")),
|
.put(TextureSlot.BACK, new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/modem_back")),
|
||||||
generators.modelOutput
|
generators.modelOutput
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -249,7 +249,7 @@ class BlockModelGenerator {
|
|||||||
var generator = MultiPartGenerator.multiPart(ModRegistry.Blocks.CABLE.get());
|
var generator = MultiPartGenerator.multiPart(ModRegistry.Blocks.CABLE.get());
|
||||||
|
|
||||||
// When a cable only has a neighbour in a single direction, we redirect the core to face that direction.
|
// When a cable only has a neighbour in a single direction, we redirect the core to face that direction.
|
||||||
var coreFacing = new ResourceLocation(ComputerCraft.MOD_ID, "block/cable_core_facing");
|
var coreFacing = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/cable_core_facing");
|
||||||
// Up/Down
|
// Up/Down
|
||||||
generator.with(
|
generator.with(
|
||||||
Condition.or(
|
Condition.or(
|
||||||
@ -279,7 +279,7 @@ class BlockModelGenerator {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Find all other possibilities and emit a "solid" core which doesn't have a facing direction.
|
// Find all other possibilities and emit a "solid" core which doesn't have a facing direction.
|
||||||
var core = new ResourceLocation(ComputerCraft.MOD_ID, "block/cable_core_any");
|
var core = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/cable_core_any");
|
||||||
List<Condition.TerminalCondition> rightAngles = new ArrayList<>();
|
List<Condition.TerminalCondition> rightAngles = new ArrayList<>();
|
||||||
for (var i = 0; i < DirectionUtil.FACINGS.length; i++) {
|
for (var i = 0; i < DirectionUtil.FACINGS.length; i++) {
|
||||||
for (var j = i; j < DirectionUtil.FACINGS.length; j++) {
|
for (var j = i; j < DirectionUtil.FACINGS.length; j++) {
|
||||||
@ -293,7 +293,7 @@ class BlockModelGenerator {
|
|||||||
generator.with(Condition.or(rightAngles.toArray(new Condition[0])), Variant.variant().with(VariantProperties.MODEL, core));
|
generator.with(Condition.or(rightAngles.toArray(new Condition[0])), Variant.variant().with(VariantProperties.MODEL, core));
|
||||||
|
|
||||||
// Then emit the actual cable arms
|
// Then emit the actual cable arms
|
||||||
var arm = new ResourceLocation(ComputerCraft.MOD_ID, "block/cable_arm");
|
var arm = new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/cable_arm");
|
||||||
for (var direction : DirectionUtil.FACINGS) {
|
for (var direction : DirectionUtil.FACINGS) {
|
||||||
generator.with(
|
generator.with(
|
||||||
new Condition.TerminalCondition().term(CABLE_DIRECTIONS[direction.ordinal()], true),
|
new Condition.TerminalCondition().term(CABLE_DIRECTIONS[direction.ordinal()], true),
|
||||||
@ -312,7 +312,7 @@ class BlockModelGenerator {
|
|||||||
generator.with(
|
generator.with(
|
||||||
new Condition.TerminalCondition().term(BlockCable.MODEM, CableModemVariant.from(direction, on, peripheral)),
|
new Condition.TerminalCondition().term(BlockCable.MODEM, CableModemVariant.from(direction, on, peripheral)),
|
||||||
Variant.variant()
|
Variant.variant()
|
||||||
.with(VariantProperties.MODEL, new ResourceLocation(ComputerCraft.MOD_ID, "block/wired_modem" + suffix))
|
.with(VariantProperties.MODEL, new ResourceLocation(ComputerCraftAPI.MOD_ID, "block/wired_modem" + suffix))
|
||||||
.with(VariantProperties.X_ROT, toXAngle(direction))
|
.with(VariantProperties.X_ROT, toXAngle(direction))
|
||||||
.with(VariantProperties.Y_ROT, toYAngle(direction))
|
.with(VariantProperties.Y_ROT, toYAngle(direction))
|
||||||
);
|
);
|
||||||
@ -334,13 +334,13 @@ class BlockModelGenerator {
|
|||||||
|
|
||||||
private static void registerTurtleUpgrade(BlockModelGenerators generators, String name, String texture) {
|
private static void registerTurtleUpgrade(BlockModelGenerators generators, String name, String texture) {
|
||||||
TURTLE_UPGRADE_LEFT.create(
|
TURTLE_UPGRADE_LEFT.create(
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, name + "_left"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, name + "_left"),
|
||||||
TextureMapping.defaultTexture(new ResourceLocation(ComputerCraft.MOD_ID, texture)),
|
TextureMapping.defaultTexture(new ResourceLocation(ComputerCraftAPI.MOD_ID, texture)),
|
||||||
generators.modelOutput
|
generators.modelOutput
|
||||||
);
|
);
|
||||||
TURTLE_UPGRADE_RIGHT.create(
|
TURTLE_UPGRADE_RIGHT.create(
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, name + "_right"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, name + "_right"),
|
||||||
TextureMapping.defaultTexture(new ResourceLocation(ComputerCraft.MOD_ID, texture)),
|
TextureMapping.defaultTexture(new ResourceLocation(ComputerCraftAPI.MOD_ID, texture)),
|
||||||
generators.modelOutput
|
generators.modelOutput
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import net.minecraft.data.DataGenerator;
|
import net.minecraft.data.DataGenerator;
|
||||||
import net.minecraft.data.tags.BlockTagsProvider;
|
import net.minecraft.data.tags.BlockTagsProvider;
|
||||||
@ -16,7 +16,7 @@ import static dan200.computercraft.api.ComputerCraftTags.Blocks.*;
|
|||||||
|
|
||||||
class BlockTagsGenerator extends BlockTagsProvider {
|
class BlockTagsGenerator extends BlockTagsProvider {
|
||||||
BlockTagsGenerator(DataGenerator generator, ExistingFileHelper helper) {
|
BlockTagsGenerator(DataGenerator generator, ExistingFileHelper helper) {
|
||||||
super(generator, ComputerCraft.MOD_ID, helper);
|
super(generator, ComputerCraftAPI.MOD_ID, helper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import net.minecraft.data.models.ItemModelGenerators;
|
import net.minecraft.data.models.ItemModelGenerators;
|
||||||
import net.minecraft.data.models.model.ModelTemplate;
|
import net.minecraft.data.models.model.ModelTemplate;
|
||||||
@ -29,7 +29,7 @@ public final class ItemModelGenerator {
|
|||||||
|
|
||||||
registerPocketComputer(generators, getModelLocation(ModRegistry.Items.POCKET_COMPUTER_NORMAL.get()), false);
|
registerPocketComputer(generators, getModelLocation(ModRegistry.Items.POCKET_COMPUTER_NORMAL.get()), false);
|
||||||
registerPocketComputer(generators, getModelLocation(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get()), false);
|
registerPocketComputer(generators, getModelLocation(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get()), false);
|
||||||
registerPocketComputer(generators, new ResourceLocation(ComputerCraft.MOD_ID, "item/pocket_computer_colour"), true);
|
registerPocketComputer(generators, new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/pocket_computer_colour"), true);
|
||||||
|
|
||||||
generators.generateFlatItem(ModRegistry.Items.PRINTED_BOOK.get(), ModelTemplates.FLAT_ITEM);
|
generators.generateFlatItem(ModRegistry.Items.PRINTED_BOOK.get(), ModelTemplates.FLAT_ITEM);
|
||||||
generators.generateFlatItem(ModRegistry.Items.PRINTED_PAGE.get(), ModelTemplates.FLAT_ITEM);
|
generators.generateFlatItem(ModRegistry.Items.PRINTED_PAGE.get(), ModelTemplates.FLAT_ITEM);
|
||||||
@ -38,21 +38,21 @@ public final class ItemModelGenerator {
|
|||||||
|
|
||||||
private static void registerPocketComputer(ItemModelGenerators generators, ResourceLocation id, boolean off) {
|
private static void registerPocketComputer(ItemModelGenerators generators, ResourceLocation id, boolean off) {
|
||||||
createFlatItem(generators, addSuffix(id, "_blinking"),
|
createFlatItem(generators, addSuffix(id, "_blinking"),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/pocket_computer_blink"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/pocket_computer_blink"),
|
||||||
id,
|
id,
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/pocket_computer_light")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/pocket_computer_light")
|
||||||
);
|
);
|
||||||
|
|
||||||
createFlatItem(generators, addSuffix(id, "_on"),
|
createFlatItem(generators, addSuffix(id, "_on"),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/pocket_computer_on"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/pocket_computer_on"),
|
||||||
id,
|
id,
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/pocket_computer_light")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/pocket_computer_light")
|
||||||
);
|
);
|
||||||
|
|
||||||
// Don't emit the default/off state for advanced/normal pocket computers, as they have item overrides.
|
// Don't emit the default/off state for advanced/normal pocket computers, as they have item overrides.
|
||||||
if (off) {
|
if (off) {
|
||||||
createFlatItem(generators, id,
|
createFlatItem(generators, id,
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/pocket_computer_frame"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/pocket_computer_frame"),
|
||||||
id
|
id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -60,8 +60,8 @@ public final class ItemModelGenerator {
|
|||||||
|
|
||||||
private static void registerDisk(ItemModelGenerators generators, Item item) {
|
private static void registerDisk(ItemModelGenerators generators, Item item) {
|
||||||
createFlatItem(generators, item,
|
createFlatItem(generators, item,
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/disk_frame"),
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/disk_frame"),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "item/disk_colour")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "item/disk_colour")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.ComputerCraftTags.Blocks;
|
import dan200.computercraft.api.ComputerCraftTags.Blocks;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import net.minecraft.data.DataGenerator;
|
import net.minecraft.data.DataGenerator;
|
||||||
@ -17,7 +17,7 @@ import static dan200.computercraft.api.ComputerCraftTags.Items.*;
|
|||||||
|
|
||||||
class ItemTagsGenerator extends ItemTagsProvider {
|
class ItemTagsGenerator extends ItemTagsProvider {
|
||||||
ItemTagsGenerator(DataGenerator generator, BlockTagsGenerator blockTags, ExistingFileHelper helper) {
|
ItemTagsGenerator(DataGenerator generator, BlockTagsGenerator blockTags, ExistingFileHelper helper) {
|
||||||
super(generator, blockTags, ComputerCraft.MOD_ID, helper);
|
super(generator, blockTags, ComputerCraftAPI.MOD_ID, helper);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.CommonHooks;
|
import dan200.computercraft.shared.CommonHooks;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import dan200.computercraft.shared.data.BlockNamedEntityLootCondition;
|
import dan200.computercraft.shared.data.BlockNamedEntityLootCondition;
|
||||||
@ -115,7 +115,7 @@ class LootTableGenerator extends LootTableProvider {
|
|||||||
private static void computerDrop(BiConsumer<ResourceLocation, LootTable.Builder> add, Supplier<? extends Block> block) {
|
private static void computerDrop(BiConsumer<ResourceLocation, LootTable.Builder> add, Supplier<? extends Block> block) {
|
||||||
blockDrop(
|
blockDrop(
|
||||||
add, block,
|
add, block,
|
||||||
DynamicLoot.dynamicEntry(new ResourceLocation(ComputerCraft.MOD_ID, "computer")),
|
DynamicLoot.dynamicEntry(new ResourceLocation(ComputerCraftAPI.MOD_ID, "computer")),
|
||||||
AlternativeLootItemCondition.alternative(
|
AlternativeLootItemCondition.alternative(
|
||||||
BlockNamedEntityLootCondition.BUILDER,
|
BlockNamedEntityLootCondition.BUILDER,
|
||||||
HasComputerIdLootCondition.BUILDER,
|
HasComputerIdLootCondition.BUILDER,
|
||||||
|
@ -5,10 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.shared.platform.Registries;
|
import dan200.computercraft.shared.platform.Registries;
|
||||||
import net.minecraft.data.CachedOutput;
|
import net.minecraft.data.CachedOutput;
|
||||||
import net.minecraft.data.DataGenerator;
|
import net.minecraft.data.DataGenerator;
|
||||||
@ -21,6 +18,8 @@ import net.minecraft.data.models.model.ModelLocationUtils;
|
|||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -38,7 +37,7 @@ import java.util.function.Supplier;
|
|||||||
* Please don't sue me Mojang. Or at least make these changes to vanilla before doing so!
|
* Please don't sue me Mojang. Or at least make these changes to vanilla before doing so!
|
||||||
*/
|
*/
|
||||||
public class ModelProvider implements DataProvider {
|
public class ModelProvider implements DataProvider {
|
||||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
|
private static final Logger LOG = LoggerFactory.getLogger(ModelProvider.class);
|
||||||
|
|
||||||
private final DataGenerator.PathProvider blockStatePath;
|
private final DataGenerator.PathProvider blockStatePath;
|
||||||
private final DataGenerator.PathProvider modelPath;
|
private final DataGenerator.PathProvider modelPath;
|
||||||
@ -96,7 +95,7 @@ public class ModelProvider implements DataProvider {
|
|||||||
try {
|
try {
|
||||||
DataProvider.saveStable(output, entry.getValue().get(), path);
|
DataProvider.saveStable(output, entry.getValue().get(), path);
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
ComputerCraft.log.error("Couldn't save {}", path, exception);
|
LOG.error("Couldn't save {}", path, exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.pocket.PocketUpgradeDataProvider;
|
import dan200.computercraft.api.pocket.PocketUpgradeDataProvider;
|
||||||
import dan200.computercraft.api.pocket.PocketUpgradeSerialiser;
|
import dan200.computercraft.api.pocket.PocketUpgradeSerialiser;
|
||||||
import net.minecraft.data.DataGenerator;
|
import net.minecraft.data.DataGenerator;
|
||||||
@ -29,6 +29,6 @@ class PocketUpgradeGenerator extends PocketUpgradeDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ResourceLocation id(String id) {
|
private static ResourceLocation id(String id) {
|
||||||
return new ResourceLocation(ComputerCraft.MOD_ID, id);
|
return new ResourceLocation(ComputerCraftAPI.MOD_ID, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.pocket.PocketUpgradeDataProvider;
|
import dan200.computercraft.api.pocket.PocketUpgradeDataProvider;
|
||||||
import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider;
|
import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider;
|
||||||
import dan200.computercraft.core.util.Colour;
|
import dan200.computercraft.core.util.Colour;
|
||||||
@ -87,7 +87,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPELESS.get(), add)
|
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPELESS.get(), add)
|
||||||
.withResultTag(x -> x.putInt(IColouredItem.NBT_COLOUR, colour.getHex())),
|
.withResultTag(x -> x.putInt(IColouredItem.NBT_COLOUR, colour.getHex())),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "disk_" + (colour.ordinal() + 1))
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "disk_" + (colour.ordinal() + 1))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,7 +108,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
var result = TurtleItemFactory.create(-1, null, -1, family, null, upgrade, -1, null);
|
var result = TurtleItemFactory.create(-1, null, -1, family, null, upgrade, -1, null);
|
||||||
ShapedRecipeBuilder
|
ShapedRecipeBuilder
|
||||||
.shaped(result.getItem())
|
.shaped(result.getItem())
|
||||||
.group(String.format("%s:turtle_%s", ComputerCraft.MOD_ID, nameId))
|
.group(String.format("%s:turtle_%s", ComputerCraftAPI.MOD_ID, nameId))
|
||||||
.pattern("#T")
|
.pattern("#T")
|
||||||
.define('T', base.getItem())
|
.define('T', base.getItem())
|
||||||
.define('#', upgrade.getCraftingItem().getItem())
|
.define('#', upgrade.getCraftingItem().getItem())
|
||||||
@ -116,7 +116,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
inventoryChange(base.getItem(), upgrade.getCraftingItem().getItem()))
|
inventoryChange(base.getItem(), upgrade.getCraftingItem().getItem()))
|
||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPED.get(), add).withResultTag(result.getTag()),
|
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPED.get(), add).withResultTag(result.getTag()),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, String.format("turtle_%s/%s/%s",
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, String.format("turtle_%s/%s/%s",
|
||||||
nameId, upgrade.getUpgradeID().getNamespace(), upgrade.getUpgradeID().getPath()
|
nameId, upgrade.getUpgradeID().getNamespace(), upgrade.getUpgradeID().getPath()
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
@ -140,7 +140,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
var result = PocketComputerItemFactory.create(-1, null, -1, family, upgrade);
|
var result = PocketComputerItemFactory.create(-1, null, -1, family, upgrade);
|
||||||
ShapedRecipeBuilder
|
ShapedRecipeBuilder
|
||||||
.shaped(result.getItem())
|
.shaped(result.getItem())
|
||||||
.group(String.format("%s:pocket_%s", ComputerCraft.MOD_ID, nameId))
|
.group(String.format("%s:pocket_%s", ComputerCraftAPI.MOD_ID, nameId))
|
||||||
.pattern("#")
|
.pattern("#")
|
||||||
.pattern("P")
|
.pattern("P")
|
||||||
.define('P', base.getItem())
|
.define('P', base.getItem())
|
||||||
@ -149,7 +149,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
inventoryChange(base.getItem(), upgrade.getCraftingItem().getItem()))
|
inventoryChange(base.getItem(), upgrade.getCraftingItem().getItem()))
|
||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPED.get(), add).withResultTag(result.getTag()),
|
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.IMPOSTOR_SHAPED.get(), add).withResultTag(result.getTag()),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, String.format("pocket_%s/%s/%s",
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, String.format("pocket_%s/%s/%s",
|
||||||
nameId, upgrade.getUpgradeID().getNamespace(), upgrade.getUpgradeID().getPath()
|
nameId, upgrade.getUpgradeID().getNamespace(), upgrade.getUpgradeID().getPath()
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
@ -201,7 +201,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.unlockedBy("has_components", inventoryChange(itemPredicate(ModRegistry.Items.COMPUTER_NORMAL.get()), itemPredicate(ingredients.goldIngot())))
|
.unlockedBy("has_components", inventoryChange(itemPredicate(ModRegistry.Items.COMPUTER_NORMAL.get()), itemPredicate(ingredients.goldIngot())))
|
||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.COMPUTER_UPGRADE.get(), add).withExtraData(family(ComputerFamily.ADVANCED)),
|
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.COMPUTER_UPGRADE.get(), add).withExtraData(family(ComputerFamily.ADVANCED)),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "computer_advanced_upgrade")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "computer_advanced_upgrade")
|
||||||
);
|
);
|
||||||
|
|
||||||
ShapedRecipeBuilder
|
ShapedRecipeBuilder
|
||||||
@ -248,7 +248,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.unlockedBy("has_components", inventoryChange(itemPredicate(ModRegistry.Items.TURTLE_NORMAL.get()), itemPredicate(ingredients.goldIngot())))
|
.unlockedBy("has_components", inventoryChange(itemPredicate(ModRegistry.Items.TURTLE_NORMAL.get()), itemPredicate(ingredients.goldIngot())))
|
||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.COMPUTER_UPGRADE.get(), add).withExtraData(family(ComputerFamily.ADVANCED)),
|
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.COMPUTER_UPGRADE.get(), add).withExtraData(family(ComputerFamily.ADVANCED)),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "turtle_advanced_upgrade")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_advanced_upgrade")
|
||||||
);
|
);
|
||||||
|
|
||||||
ShapedRecipeBuilder
|
ShapedRecipeBuilder
|
||||||
@ -315,7 +315,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.unlockedBy("has_components", inventoryChange(itemPredicate(ModRegistry.Items.POCKET_COMPUTER_NORMAL.get()), itemPredicate(ingredients.goldIngot())))
|
.unlockedBy("has_components", inventoryChange(itemPredicate(ModRegistry.Items.POCKET_COMPUTER_NORMAL.get()), itemPredicate(ingredients.goldIngot())))
|
||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.COMPUTER_UPGRADE.get(), add).withExtraData(family(ComputerFamily.ADVANCED)),
|
RecipeWrapper.wrap(ModRegistry.RecipeSerializers.COMPUTER_UPGRADE.get(), add).withExtraData(family(ComputerFamily.ADVANCED)),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "pocket_computer_advanced_upgrade")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "pocket_computer_advanced_upgrade")
|
||||||
);
|
);
|
||||||
|
|
||||||
ShapedRecipeBuilder
|
ShapedRecipeBuilder
|
||||||
@ -355,12 +355,12 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.shapeless(ModRegistry.Blocks.WIRED_MODEM_FULL.get())
|
.shapeless(ModRegistry.Blocks.WIRED_MODEM_FULL.get())
|
||||||
.requires(ModRegistry.Items.WIRED_MODEM.get())
|
.requires(ModRegistry.Items.WIRED_MODEM.get())
|
||||||
.unlockedBy("has_modem", inventoryChange(WIRED_MODEM))
|
.unlockedBy("has_modem", inventoryChange(WIRED_MODEM))
|
||||||
.save(add, new ResourceLocation(ComputerCraft.MOD_ID, "wired_modem_full_from"));
|
.save(add, new ResourceLocation(ComputerCraftAPI.MOD_ID, "wired_modem_full_from"));
|
||||||
ShapelessRecipeBuilder
|
ShapelessRecipeBuilder
|
||||||
.shapeless(ModRegistry.Items.WIRED_MODEM.get())
|
.shapeless(ModRegistry.Items.WIRED_MODEM.get())
|
||||||
.requires(ModRegistry.Blocks.WIRED_MODEM_FULL.get())
|
.requires(ModRegistry.Blocks.WIRED_MODEM_FULL.get())
|
||||||
.unlockedBy("has_modem", inventoryChange(WIRED_MODEM))
|
.unlockedBy("has_modem", inventoryChange(WIRED_MODEM))
|
||||||
.save(add, new ResourceLocation(ComputerCraft.MOD_ID, "wired_modem_full_to"));
|
.save(add, new ResourceLocation(ComputerCraftAPI.MOD_ID, "wired_modem_full_to"));
|
||||||
|
|
||||||
ShapedRecipeBuilder
|
ShapedRecipeBuilder
|
||||||
.shaped(ModRegistry.Blocks.WIRELESS_MODEM_NORMAL.get())
|
.shaped(ModRegistry.Blocks.WIRELESS_MODEM_NORMAL.get())
|
||||||
@ -391,7 +391,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(RecipeSerializer.SHAPELESS_RECIPE, add)
|
RecipeWrapper.wrap(RecipeSerializer.SHAPELESS_RECIPE, add)
|
||||||
.withResultTag(playerHead("Cloudhunter", "6d074736-b1e9-4378-a99b-bd8777821c9c")),
|
.withResultTag(playerHead("Cloudhunter", "6d074736-b1e9-4378-a99b-bd8777821c9c")),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "skull_cloudy")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "skull_cloudy")
|
||||||
);
|
);
|
||||||
|
|
||||||
ShapelessRecipeBuilder
|
ShapelessRecipeBuilder
|
||||||
@ -402,7 +402,7 @@ class RecipeGenerator extends RecipeProvider {
|
|||||||
.save(
|
.save(
|
||||||
RecipeWrapper.wrap(RecipeSerializer.SHAPELESS_RECIPE, add)
|
RecipeWrapper.wrap(RecipeSerializer.SHAPELESS_RECIPE, add)
|
||||||
.withResultTag(playerHead("dan200", "f3c8d69b-0776-4512-8434-d1b2165909eb")),
|
.withResultTag(playerHead("dan200", "f3c8d69b-0776-4512-8434-d1b2165909eb")),
|
||||||
new ResourceLocation(ComputerCraft.MOD_ID, "skull_dan200")
|
new ResourceLocation(ComputerCraftAPI.MOD_ID, "skull_dan200")
|
||||||
);
|
);
|
||||||
|
|
||||||
ShapelessRecipeBuilder
|
ShapelessRecipeBuilder
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.data;
|
package dan200.computercraft.data;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.ComputerCraftTags.Blocks;
|
import dan200.computercraft.api.ComputerCraftTags.Blocks;
|
||||||
import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider;
|
import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider;
|
||||||
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
|
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
|
||||||
@ -37,7 +37,7 @@ class TurtleUpgradeGenerator extends TurtleUpgradeDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ResourceLocation id(String id) {
|
private static ResourceLocation id(String id) {
|
||||||
return new ResourceLocation(ComputerCraft.MOD_ID, id);
|
return new ResourceLocation(ComputerCraftAPI.MOD_ID, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ResourceLocation vanilla(String id) {
|
private static ResourceLocation vanilla(String id) {
|
||||||
|
@ -5,17 +5,20 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
|
import dan200.computercraft.api.redstone.IBundledRedstoneProvider;
|
||||||
import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider;
|
import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public final class BundledRedstone {
|
public final class BundledRedstone {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(BundledRedstone.class);
|
||||||
|
|
||||||
private static final ArrayList<IBundledRedstoneProvider> providers = new ArrayList<>();
|
private static final ArrayList<IBundledRedstoneProvider> providers = new ArrayList<>();
|
||||||
|
|
||||||
private BundledRedstone() {
|
private BundledRedstone() {
|
||||||
@ -42,7 +45,7 @@ public final class BundledRedstone {
|
|||||||
combinedSignal = combinedSignal < 0 ? signal & 0xffff : combinedSignal | (signal & 0xffff);
|
combinedSignal = combinedSignal < 0 ? signal & 0xffff : combinedSignal | (signal & 0xffff);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ComputerCraft.log.error("Bundled redstone provider " + bundledRedstoneProvider + " errored.", e);
|
LOG.error("Bundled redstone provider " + bundledRedstoneProvider + " errored.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.core.apis.http.NetworkUtils;
|
import dan200.computercraft.core.apis.http.NetworkUtils;
|
||||||
import dan200.computercraft.shared.computer.core.ResourceMount;
|
import dan200.computercraft.shared.computer.core.ResourceMount;
|
||||||
import dan200.computercraft.shared.computer.core.ServerContext;
|
import dan200.computercraft.shared.computer.core.ServerContext;
|
||||||
@ -76,7 +76,7 @@ public final class CommonHooks {
|
|||||||
MonitorWatcher.onWatch(chunk, player);
|
MonitorWatcher.onWatch(chunk, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final ResourceLocation LOOT_TREASURE_DISK = new ResourceLocation(ComputerCraft.MOD_ID, "treasure_disk");
|
public static final ResourceLocation LOOT_TREASURE_DISK = new ResourceLocation(ComputerCraftAPI.MOD_ID, "treasure_disk");
|
||||||
|
|
||||||
private static final Set<ResourceLocation> TABLES = new HashSet<>(Arrays.asList(
|
private static final Set<ResourceLocation> TABLES = new HashSet<>(Arrays.asList(
|
||||||
BuiltInLootTables.SIMPLE_DUNGEON,
|
BuiltInLootTables.SIMPLE_DUNGEON,
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.command.CommandComputerCraft;
|
import dan200.computercraft.shared.command.CommandComputerCraft;
|
||||||
import dan200.computercraft.shared.computer.blocks.TileComputer;
|
import dan200.computercraft.shared.computer.blocks.TileComputer;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.client.UpgradesLoadedMessage;
|
import dan200.computercraft.shared.network.client.UpgradesLoadedMessage;
|
||||||
import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheral;
|
import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheral;
|
||||||
import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive;
|
import dan200.computercraft.shared.peripheral.diskdrive.TileDiskDrive;
|
||||||
@ -134,7 +134,7 @@ public class ForgeCommonHooks {
|
|||||||
event, INVENTORY, ITEM_HANDLER,
|
event, INVENTORY, ITEM_HANDLER,
|
||||||
s -> s == null ? new InvWrapper(printer) : new SidedInvWrapper(printer, s)
|
s -> s == null ? new InvWrapper(printer) : new SidedInvWrapper(printer, s)
|
||||||
);
|
);
|
||||||
} else if (ComputerCraft.enableCommandBlock && blockEntity instanceof CommandBlockEntity commandBlock) {
|
} else if (Config.enableCommandBlock && blockEntity instanceof CommandBlockEntity commandBlock) {
|
||||||
CapabilityProvider.attach(event, PERIPHERAL, CAPABILITY_PERIPHERAL, () -> new CommandBlockPeripheral(commandBlock));
|
CapabilityProvider.attach(event, PERIPHERAL, CAPABILITY_PERIPHERAL, () -> new CommandBlockPeripheral(commandBlock));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,10 +5,11 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
import dan200.computercraft.api.media.IMediaProvider;
|
import dan200.computercraft.api.media.IMediaProvider;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
@ -16,6 +17,8 @@ import java.util.Objects;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public final class MediaProviders {
|
public final class MediaProviders {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(MediaProviders.class);
|
||||||
|
|
||||||
private static final Set<IMediaProvider> providers = new LinkedHashSet<>();
|
private static final Set<IMediaProvider> providers = new LinkedHashSet<>();
|
||||||
|
|
||||||
private MediaProviders() {
|
private MediaProviders() {
|
||||||
@ -35,8 +38,8 @@ public final class MediaProviders {
|
|||||||
var media = mediaProvider.getMedia(stack);
|
var media = mediaProvider.getMedia(stack);
|
||||||
if (media != null) return media;
|
if (media != null) return media;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// mod misbehaved, ignore it
|
// Mod misbehaved, ignore it
|
||||||
ComputerCraft.log.error("Media provider " + mediaProvider + " errored.", e);
|
LOG.error("Media provider " + mediaProvider + " errored.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||||
import dan200.computercraft.shared.peripheral.generic.GenericPeripheralProvider;
|
import dan200.computercraft.shared.peripheral.generic.GenericPeripheralProvider;
|
||||||
@ -14,6 +13,9 @@ import net.minecraft.core.BlockPos;
|
|||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.common.util.NonNullConsumer;
|
import net.minecraftforge.common.util.NonNullConsumer;
|
||||||
|
import org.jline.utils.Log;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -23,6 +25,8 @@ import java.util.Objects;
|
|||||||
import static dan200.computercraft.shared.Capabilities.CAPABILITY_PERIPHERAL;
|
import static dan200.computercraft.shared.Capabilities.CAPABILITY_PERIPHERAL;
|
||||||
|
|
||||||
public final class Peripherals {
|
public final class Peripherals {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(Peripherals.class);
|
||||||
|
|
||||||
private static final Collection<IPeripheralProvider> providers = new LinkedHashSet<>();
|
private static final Collection<IPeripheralProvider> providers = new LinkedHashSet<>();
|
||||||
|
|
||||||
private Peripherals() {
|
private Peripherals() {
|
||||||
@ -52,7 +56,7 @@ public final class Peripherals {
|
|||||||
var peripheral = peripheralProvider.getPeripheral(world, pos, side);
|
var peripheral = peripheralProvider.getPeripheral(world, pos, side);
|
||||||
if (peripheral.isPresent()) return CapabilityUtil.unwrap(peripheral, invalidate);
|
if (peripheral.isPresent()) return CapabilityUtil.unwrap(peripheral, invalidate);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ComputerCraft.log.error("Peripheral provider " + peripheralProvider + " errored.", e);
|
Log.error("Peripheral provider " + peripheralProvider + " errored.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||||
import dan200.computercraft.api.pocket.PocketUpgradeSerialiser;
|
import dan200.computercraft.api.pocket.PocketUpgradeSerialiser;
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ public final class PocketUpgrades {
|
|||||||
|
|
||||||
public static Stream<IPocketUpgrade> getVanillaUpgrades() {
|
public static Stream<IPocketUpgrade> getVanillaUpgrades() {
|
||||||
return instance().getUpgradeWrappers().values().stream()
|
return instance().getUpgradeWrappers().values().stream()
|
||||||
.filter(x -> x.modId().equals(ComputerCraft.MOD_ID))
|
.filter(x -> x.modId().equals(ComputerCraftAPI.MOD_ID))
|
||||||
.map(UpgradeManager.UpgradeWrapper::upgrade);
|
.map(UpgradeManager.UpgradeWrapper::upgrade);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||||
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
|
import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser;
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ public final class TurtleUpgrades {
|
|||||||
|
|
||||||
public static Stream<ITurtleUpgrade> getVanillaUpgrades() {
|
public static Stream<ITurtleUpgrade> getVanillaUpgrades() {
|
||||||
return instance().getUpgradeWrappers().values().stream()
|
return instance().getUpgradeWrappers().values().stream()
|
||||||
.filter(x -> x.modId().equals(ComputerCraft.MOD_ID))
|
.filter(x -> x.modId().equals(ComputerCraftAPI.MOD_ID))
|
||||||
.map(UpgradeManager.UpgradeWrapper::upgrade);
|
.map(UpgradeManager.UpgradeWrapper::upgrade);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared;
|
||||||
|
|
||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.upgrades.IUpgradeBase;
|
import dan200.computercraft.api.upgrades.IUpgradeBase;
|
||||||
import dan200.computercraft.api.upgrades.UpgradeSerialiser;
|
import dan200.computercraft.api.upgrades.UpgradeSerialiser;
|
||||||
import dan200.computercraft.shared.platform.PlatformHelper;
|
import dan200.computercraft.shared.platform.PlatformHelper;
|
||||||
@ -122,7 +122,7 @@ public class UpgradeManager<R extends UpgradeSerialiser<? extends T>, T extends
|
|||||||
// TODO: Can we track which mod this resource came from and use that instead? It's theoretically possible,
|
// TODO: Can we track which mod this resource came from and use that instead? It's theoretically possible,
|
||||||
// but maybe not ideal for datapacks.
|
// but maybe not ideal for datapacks.
|
||||||
var modId = id.getNamespace();
|
var modId = id.getNamespace();
|
||||||
if (modId.equals("minecraft") || modId.equals("")) modId = ComputerCraft.MOD_ID;
|
if (modId.equals("minecraft") || modId.equals("")) modId = ComputerCraftAPI.MOD_ID;
|
||||||
|
|
||||||
var upgrade = serialiser.fromJson(id, root);
|
var upgrade = serialiser.fromJson(id, root);
|
||||||
if (!upgrade.getUpgradeID().equals(id)) {
|
if (!upgrade.getUpgradeID().equals(id)) {
|
||||||
|
@ -7,7 +7,6 @@ package dan200.computercraft.shared.computer.apis;
|
|||||||
|
|
||||||
import com.mojang.brigadier.tree.CommandNode;
|
import com.mojang.brigadier.tree.CommandNode;
|
||||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.detail.BlockReference;
|
import dan200.computercraft.api.detail.BlockReference;
|
||||||
import dan200.computercraft.api.detail.VanillaDetailRegistries;
|
import dan200.computercraft.api.detail.VanillaDetailRegistries;
|
||||||
import dan200.computercraft.api.lua.*;
|
import dan200.computercraft.api.lua.*;
|
||||||
@ -21,6 +20,8 @@ import net.minecraft.resources.ResourceKey;
|
|||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -29,6 +30,8 @@ import java.util.*;
|
|||||||
* @cc.since 1.7
|
* @cc.since 1.7
|
||||||
*/
|
*/
|
||||||
public class CommandAPI implements ILuaAPI {
|
public class CommandAPI implements ILuaAPI {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(CommandAPI.class);
|
||||||
|
|
||||||
private final TileCommandComputer computer;
|
private final TileCommandComputer computer;
|
||||||
|
|
||||||
public CommandAPI(TileCommandComputer computer) {
|
public CommandAPI(TileCommandComputer computer) {
|
||||||
@ -57,7 +60,7 @@ public class CommandAPI implements ILuaAPI {
|
|||||||
var result = commandManager.performPrefixedCommand(computer.getSource(), command);
|
var result = commandManager.performPrefixedCommand(computer.getSource(), command);
|
||||||
return new Object[]{ result > 0, receiver.copyOutput(), result };
|
return new Object[]{ result > 0, receiver.copyOutput(), result };
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
ComputerCraft.log.error(Logging.JAVA_ERROR, "Error running command.", t);
|
LOG.error(Logging.JAVA_ERROR, "Error running command.", t);
|
||||||
return new Object[]{ false, createOutput("Java Exception Thrown: " + t) };
|
return new Object[]{ false, createOutput("Java Exception Thrown: " + t) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.blocks;
|
package dan200.computercraft.shared.computer.blocks;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.common.BlockGeneric;
|
import dan200.computercraft.shared.common.BlockGeneric;
|
||||||
import dan200.computercraft.shared.common.IBundledRedstoneBlock;
|
import dan200.computercraft.shared.common.IBundledRedstoneBlock;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
@ -35,7 +35,7 @@ import net.minecraft.world.phys.Vec3;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public abstract class BlockComputerBase<T extends TileComputerBase> extends BlockGeneric implements IBundledRedstoneBlock {
|
public abstract class BlockComputerBase<T extends TileComputerBase> extends BlockGeneric implements IBundledRedstoneBlock {
|
||||||
private static final ResourceLocation DROP = new ResourceLocation(ComputerCraft.MOD_ID, "computer");
|
private static final ResourceLocation DROP = new ResourceLocation(ComputerCraftAPI.MOD_ID, "computer");
|
||||||
|
|
||||||
private final ComputerFamily family;
|
private final ComputerFamily family;
|
||||||
protected final RegistryEntry<BlockEntityType<T>> type;
|
protected final RegistryEntry<BlockEntityType<T>> type;
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.blocks;
|
package dan200.computercraft.shared.computer.blocks;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.shared.computer.apis.CommandAPI;
|
import dan200.computercraft.shared.computer.apis.CommandAPI;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import net.minecraft.commands.CommandSource;
|
import net.minecraft.commands.CommandSource;
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
@ -105,7 +105,7 @@ public class TileCommandComputer extends TileComputer {
|
|||||||
if (server == null || !server.isCommandBlockEnabled()) {
|
if (server == null || !server.isCommandBlockEnabled()) {
|
||||||
player.displayClientMessage(Component.translatable("advMode.notEnabled"), true);
|
player.displayClientMessage(Component.translatable("advMode.notEnabled"), true);
|
||||||
return false;
|
return false;
|
||||||
} else if (ComputerCraft.commandRequireCreative ? !player.canUseGameMasterBlocks() : !server.getPlayerList().isOp(player.getGameProfile())) {
|
} else if (Config.commandRequireCreative ? !player.canUseGameMasterBlocks() : !server.getPlayerList().isOp(player.getGameProfile())) {
|
||||||
player.displayClientMessage(Component.translatable("advMode.notAllowed"), true);
|
player.displayClientMessage(Component.translatable("advMode.notAllowed"), true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.blocks;
|
package dan200.computercraft.shared.computer.blocks;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.core.computer.ComputerSide;
|
import dan200.computercraft.core.computer.ComputerSide;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
@ -13,6 +12,7 @@ import dan200.computercraft.shared.computer.core.ComputerFamily;
|
|||||||
import dan200.computercraft.shared.computer.core.ComputerState;
|
import dan200.computercraft.shared.computer.core.ComputerState;
|
||||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||||
import dan200.computercraft.shared.computer.inventory.ComputerMenuWithoutInventory;
|
import dan200.computercraft.shared.computer.inventory.ComputerMenuWithoutInventory;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
@ -36,8 +36,8 @@ public class TileComputer extends TileComputerBase {
|
|||||||
var family = getFamily();
|
var family = getFamily();
|
||||||
return new ServerComputer(
|
return new ServerComputer(
|
||||||
(ServerLevel) getLevel(), getBlockPos(), id, label,
|
(ServerLevel) getLevel(), getBlockPos(), id, label,
|
||||||
family, ComputerCraft.computerTermWidth,
|
family, Config.computerTermWidth,
|
||||||
ComputerCraft.computerTermHeight
|
Config.computerTermHeight
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@ package dan200.computercraft.shared.computer.core;
|
|||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.core.apis.handles.ArrayByteChannel;
|
import dan200.computercraft.core.apis.handles.ArrayByteChannel;
|
||||||
import dan200.computercraft.core.filesystem.FileSystem;
|
import dan200.computercraft.core.filesystem.FileSystem;
|
||||||
@ -18,6 +17,8 @@ import net.minecraft.resources.ResourceLocation;
|
|||||||
import net.minecraft.server.packs.resources.ResourceManager;
|
import net.minecraft.server.packs.resources.ResourceManager;
|
||||||
import net.minecraft.server.packs.resources.SimplePreparableReloadListener;
|
import net.minecraft.server.packs.resources.SimplePreparableReloadListener;
|
||||||
import net.minecraft.util.profiling.ProfilerFiller;
|
import net.minecraft.util.profiling.ProfilerFiller;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -29,6 +30,8 @@ import java.util.Map;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public final class ResourceMount implements IMount {
|
public final class ResourceMount implements IMount {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(ResourceMount.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Only cache files smaller than 1MiB.
|
* Only cache files smaller than 1MiB.
|
||||||
*/
|
*/
|
||||||
@ -100,9 +103,9 @@ public final class ResourceMount implements IMount {
|
|||||||
root = hasAny ? newRoot : null;
|
root = hasAny ? newRoot : null;
|
||||||
|
|
||||||
if (!hasAny) {
|
if (!hasAny) {
|
||||||
ComputerCraft.log.warn("Cannot find any files under /data/{}/{} for resource mount.", namespace, subPath);
|
LOG.warn("Cannot find any files under /data/{}/{} for resource mount.", namespace, subPath);
|
||||||
if (existingNamespace != null) {
|
if (existingNamespace != null) {
|
||||||
ComputerCraft.log.warn("There are files under /data/{}/{} though. Did you get the wrong namespace?", existingNamespace, subPath);
|
LOG.warn("There are files under /data/{}/{} though. Did you get the wrong namespace?", existingNamespace, subPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,7 +140,7 @@ public final class ResourceMount implements IMount {
|
|||||||
try {
|
try {
|
||||||
childPath = new ResourceLocation(namespace, subPath + "/" + path);
|
childPath = new ResourceLocation(namespace, subPath + "/" + path);
|
||||||
} catch (ResourceLocationException e) {
|
} catch (ResourceLocationException e) {
|
||||||
ComputerCraft.log.warn("Cannot create resource location for {} ({})", part, e.getMessage());
|
LOG.warn("Cannot create resource location for {} ({})", part, e.getMessage());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
lastEntry.children.put(part, nextEntry = new FileEntry(childPath));
|
lastEntry.children.put(part, nextEntry = new FileEntry(childPath));
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.core;
|
package dan200.computercraft.shared.computer.core;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.filesystem.IWritableMount;
|
import dan200.computercraft.api.filesystem.IWritableMount;
|
||||||
import dan200.computercraft.api.lua.ILuaAPI;
|
import dan200.computercraft.api.lua.ILuaAPI;
|
||||||
@ -18,6 +17,7 @@ import dan200.computercraft.core.metrics.MetricsObserver;
|
|||||||
import dan200.computercraft.shared.computer.menu.ComputerMenu;
|
import dan200.computercraft.shared.computer.menu.ComputerMenu;
|
||||||
import dan200.computercraft.shared.computer.terminal.NetworkedTerminal;
|
import dan200.computercraft.shared.computer.terminal.NetworkedTerminal;
|
||||||
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.NetworkMessage;
|
import dan200.computercraft.shared.network.NetworkMessage;
|
||||||
import dan200.computercraft.shared.network.client.ClientNetworkContext;
|
import dan200.computercraft.shared.network.client.ClientNetworkContext;
|
||||||
import dan200.computercraft.shared.network.client.ComputerTerminalClientMessage;
|
import dan200.computercraft.shared.network.client.ComputerTerminalClientMessage;
|
||||||
@ -246,6 +246,6 @@ public class ServerComputer implements InputHandler, ComputerEnvironment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable IWritableMount createRootMount() {
|
public @Nullable IWritableMount createRootMount() {
|
||||||
return ComputerCraftAPI.createSaveDirMount(level, "computer/" + computer.getID(), ComputerCraft.computerSpaceLimit);
|
return ComputerCraftAPI.createSaveDirMount(level, "computer/" + computer.getID(), Config.computerSpaceLimit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.shared.computer.core;
|
package dan200.computercraft.shared.computer.core;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.ComputerCraftAPIImpl;
|
import dan200.computercraft.ComputerCraftAPIImpl;
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
@ -18,11 +17,14 @@ import dan200.computercraft.core.lua.CobaltLuaMachine;
|
|||||||
import dan200.computercraft.core.lua.ILuaMachine;
|
import dan200.computercraft.core.lua.ILuaMachine;
|
||||||
import dan200.computercraft.shared.CommonHooks;
|
import dan200.computercraft.shared.CommonHooks;
|
||||||
import dan200.computercraft.shared.computer.metrics.GlobalMetrics;
|
import dan200.computercraft.shared.computer.metrics.GlobalMetrics;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.util.IDAssigner;
|
import dan200.computercraft.shared.util.IDAssigner;
|
||||||
import net.minecraft.SharedConstants;
|
import net.minecraft.SharedConstants;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.storage.LevelResource;
|
import net.minecraft.world.level.storage.LevelResource;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -41,7 +43,9 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* @see CommonHooks for where the context is created and torn down.
|
* @see CommonHooks for where the context is created and torn down.
|
||||||
*/
|
*/
|
||||||
public final class ServerContext {
|
public final class ServerContext {
|
||||||
private static final LevelResource FOLDER = new LevelResource(ComputerCraft.MOD_ID);
|
private static final Logger LOG = LoggerFactory.getLogger(ServerContext.class);
|
||||||
|
|
||||||
|
private static final LevelResource FOLDER = new LevelResource(ComputerCraftAPI.MOD_ID);
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public static ILuaMachine.Factory luaMachine = CobaltLuaMachine::new;
|
public static ILuaMachine.Factory luaMachine = CobaltLuaMachine::new;
|
||||||
@ -63,7 +67,7 @@ public final class ServerContext {
|
|||||||
mainThread = new MainThread();
|
mainThread = new MainThread();
|
||||||
context = new ComputerContext(
|
context = new ComputerContext(
|
||||||
new Environment(server),
|
new Environment(server),
|
||||||
new ComputerThread(ComputerCraft.computerThreads),
|
new ComputerThread(Config.computerThreads),
|
||||||
mainThread, luaMachine
|
mainThread, luaMachine
|
||||||
);
|
);
|
||||||
idAssigner = new IDAssigner(storageDir.resolve("ids.json"));
|
idAssigner = new IDAssigner(storageDir.resolve("ids.json"));
|
||||||
@ -90,10 +94,10 @@ public final class ServerContext {
|
|||||||
instance.registry.close();
|
instance.registry.close();
|
||||||
try {
|
try {
|
||||||
if (!instance.context.close(1, TimeUnit.SECONDS)) {
|
if (!instance.context.close(1, TimeUnit.SECONDS)) {
|
||||||
ComputerCraft.log.error("Failed to stop computers under deadline.");
|
LOG.error("Failed to stop computers under deadline.");
|
||||||
}
|
}
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
ComputerCraft.log.error("Failed to stop computers.", e);
|
LOG.error("Failed to stop computers.", e);
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,7 +200,7 @@ public final class ServerContext {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUserAgent() {
|
public String getUserAgent() {
|
||||||
return ComputerCraft.MOD_ID + "/" + ComputerCraftAPI.getInstalledVersion();
|
return ComputerCraftAPI.MOD_ID + "/" + ComputerCraftAPI.getInstalledVersion();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.items;
|
package dan200.computercraft.shared.computer.items;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
import dan200.computercraft.shared.computer.blocks.BlockComputerBase;
|
import dan200.computercraft.shared.computer.blocks.BlockComputerBase;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.world.item.BlockItem;
|
import net.minecraft.world.item.BlockItem;
|
||||||
@ -68,7 +68,7 @@ public abstract class ItemComputerBase extends BlockItem implements IComputerIte
|
|||||||
if (family != ComputerFamily.COMMAND) {
|
if (family != ComputerFamily.COMMAND) {
|
||||||
var id = getComputerID(stack);
|
var id = getComputerID(stack);
|
||||||
if (id >= 0) {
|
if (id >= 0) {
|
||||||
return ComputerCraftAPI.createSaveDirMount(world, "computer/" + id, ComputerCraft.computerSpaceLimit);
|
return ComputerCraftAPI.createSaveDirMount(world, "computer/" + id, Config.computerSpaceLimit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.menu;
|
package dan200.computercraft.shared.computer.menu;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.shared.computer.upload.*;
|
import dan200.computercraft.shared.computer.upload.*;
|
||||||
import dan200.computercraft.shared.network.client.UploadResultMessage;
|
import dan200.computercraft.shared.network.client.UploadResultMessage;
|
||||||
import dan200.computercraft.shared.platform.PlatformHelper;
|
import dan200.computercraft.shared.platform.PlatformHelper;
|
||||||
@ -14,6 +13,8 @@ import it.unimi.dsi.fastutil.ints.IntSet;
|
|||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -28,6 +29,8 @@ import java.util.stream.Collectors;
|
|||||||
* @param <T> The type of container this server input belongs to.
|
* @param <T> The type of container this server input belongs to.
|
||||||
*/
|
*/
|
||||||
public class ServerInputState<T extends AbstractContainerMenu & ComputerMenu> implements ServerInputHandler {
|
public class ServerInputState<T extends AbstractContainerMenu & ComputerMenu> implements ServerInputHandler {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(ServerInputState.class);
|
||||||
|
|
||||||
private final T owner;
|
private final T owner;
|
||||||
private final IntSet keysDown = new IntOpenHashSet(4);
|
private final IntSet keysDown = new IntOpenHashSet(4);
|
||||||
|
|
||||||
@ -118,7 +121,7 @@ public class ServerInputState<T extends AbstractContainerMenu & ComputerMenu> im
|
|||||||
@Override
|
@Override
|
||||||
public void continueUpload(UUID uploadId, List<FileSlice> slices) {
|
public void continueUpload(UUID uploadId, List<FileSlice> slices) {
|
||||||
if (toUploadId == null || toUpload == null || !toUploadId.equals(uploadId)) {
|
if (toUploadId == null || toUpload == null || !toUploadId.equals(uploadId)) {
|
||||||
ComputerCraft.log.warn("Invalid continueUpload call, skipping.");
|
LOG.warn("Invalid continueUpload call, skipping.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,7 +131,7 @@ public class ServerInputState<T extends AbstractContainerMenu & ComputerMenu> im
|
|||||||
@Override
|
@Override
|
||||||
public void finishUpload(ServerPlayer uploader, UUID uploadId) {
|
public void finishUpload(ServerPlayer uploader, UUID uploadId) {
|
||||||
if (toUploadId == null || toUpload == null || toUpload.isEmpty() || !toUploadId.equals(uploadId)) {
|
if (toUploadId == null || toUpload == null || toUpload.isEmpty() || !toUploadId.equals(uploadId)) {
|
||||||
ComputerCraft.log.warn("Invalid finishUpload call, skipping.");
|
LOG.warn("Invalid finishUpload call, skipping.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +146,7 @@ public class ServerInputState<T extends AbstractContainerMenu & ComputerMenu> im
|
|||||||
|
|
||||||
for (var upload : toUpload) {
|
for (var upload : toUpload) {
|
||||||
if (!upload.checksumMatches()) {
|
if (!upload.checksumMatches()) {
|
||||||
ComputerCraft.log.warn("Checksum failed to match for {}.", upload.getName());
|
LOG.warn("Checksum failed to match for {}.", upload.getName());
|
||||||
return UploadResultMessage.error(owner, Component.translatable("gui.computercraft.upload.failed.corrupted"));
|
return UploadResultMessage.error(owner, Component.translatable("gui.computercraft.upload.failed.corrupted"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.shared.computer.metrics;
|
package dan200.computercraft.shared.computer.metrics;
|
||||||
|
|
||||||
import com.google.common.base.CaseFormat;
|
import com.google.common.base.CaseFormat;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.core.metrics.Metric;
|
import dan200.computercraft.core.metrics.Metric;
|
||||||
import dan200.computercraft.core.metrics.Metrics;
|
import dan200.computercraft.core.metrics.Metrics;
|
||||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||||
@ -16,6 +15,8 @@ import dan200.computercraft.shared.computer.metrics.basic.AggregatedMetric;
|
|||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.management.*;
|
import javax.management.*;
|
||||||
@ -31,6 +32,8 @@ import java.util.function.LongSupplier;
|
|||||||
* An MBean which exposes aggregate statistics about all computers on the server.
|
* An MBean which exposes aggregate statistics about all computers on the server.
|
||||||
*/
|
*/
|
||||||
public final class ComputerMBean implements DynamicMBean, ComputerMetricsObserver {
|
public final class ComputerMBean implements DynamicMBean, ComputerMetricsObserver {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(ComputerMBean.class);
|
||||||
|
|
||||||
private static @Nullable ComputerMBean instance;
|
private static @Nullable ComputerMBean instance;
|
||||||
|
|
||||||
private final Map<String, LongSupplier> attributes = new HashMap<>();
|
private final Map<String, LongSupplier> attributes = new HashMap<>();
|
||||||
@ -60,7 +63,7 @@ public final class ComputerMBean implements DynamicMBean, ComputerMetricsObserve
|
|||||||
ManagementFactory.getPlatformMBeanServer().registerMBean(instance = new ComputerMBean(), new ObjectName("dan200.computercraft:type=Computers"));
|
ManagementFactory.getPlatformMBeanServer().registerMBean(instance = new ComputerMBean(), new ObjectName("dan200.computercraft:type=Computers"));
|
||||||
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException |
|
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException |
|
||||||
MalformedObjectNameException e) {
|
MalformedObjectNameException e) {
|
||||||
ComputerCraft.log.warn("Failed to register JMX bean", e);
|
LOG.warn("Failed to register JMX bean", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,21 +5,24 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.upload;
|
package dan200.computercraft.shared.computer.upload;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public record FileSlice(int fileId, int offset, ByteBuffer bytes) {
|
public record FileSlice(int fileId, int offset, ByteBuffer bytes) {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(FileSlice.class);
|
||||||
|
|
||||||
public void apply(List<FileUpload> files) {
|
public void apply(List<FileUpload> files) {
|
||||||
if (fileId < 0 || fileId >= files.size()) {
|
if (fileId < 0 || fileId >= files.size()) {
|
||||||
ComputerCraft.log.warn("File ID is out-of-bounds (0 <= {} < {})", fileId, files.size());
|
LOG.warn("File ID is out-of-bounds (0 <= {} < {})", fileId, files.size());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var file = files.get(fileId).getBytes();
|
var file = files.get(fileId).getBytes();
|
||||||
if (offset < 0 || offset + bytes.remaining() > file.capacity()) {
|
if (offset < 0 || offset + bytes.remaining() > file.capacity()) {
|
||||||
ComputerCraft.log.warn("File offset is out-of-bounds (0 <= {} <= {})", offset, file.capacity() - offset);
|
LOG.warn("File offset is out-of-bounds (0 <= {} <= {})", offset, file.capacity() - offset);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.computer.upload;
|
package dan200.computercraft.shared.computer.upload;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@ -14,6 +15,8 @@ import java.security.NoSuchAlgorithmException;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class FileUpload {
|
public class FileUpload {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(FileUpload.class);
|
||||||
|
|
||||||
public static final int CHECKSUM_LENGTH = 32;
|
public static final int CHECKSUM_LENGTH = 32;
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
@ -57,7 +60,7 @@ public class FileUpload {
|
|||||||
digest.update(bytes.duplicate());
|
digest.update(bytes.duplicate());
|
||||||
return digest.digest();
|
return digest.digest();
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
ComputerCraft.log.warn("Failed to compute digest ({})", e.toString());
|
LOG.warn("Failed to compute digest ({})", e.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,16 @@
|
|||||||
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
||||||
* Send enquiries to dratcliffe@gmail.com
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared.config;
|
||||||
|
|
||||||
import com.electronwill.nightconfig.core.Config;
|
import com.electronwill.nightconfig.core.Config;
|
||||||
import com.electronwill.nightconfig.core.InMemoryCommentedFormat;
|
import com.electronwill.nightconfig.core.InMemoryCommentedFormat;
|
||||||
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.core.apis.http.options.Action;
|
import dan200.computercraft.core.apis.http.options.Action;
|
||||||
import dan200.computercraft.core.apis.http.options.AddressRule;
|
import dan200.computercraft.core.apis.http.options.AddressRule;
|
||||||
import dan200.computercraft.core.apis.http.options.PartialOptions;
|
import dan200.computercraft.core.apis.http.options.PartialOptions;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -23,7 +24,9 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
/**
|
/**
|
||||||
* Parses, checks and generates {@link Config}s for {@link AddressRule}.
|
* Parses, checks and generates {@link Config}s for {@link AddressRule}.
|
||||||
*/
|
*/
|
||||||
public class AddressRuleConfig {
|
class AddressRuleConfig {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(AddressRuleConfig.class);
|
||||||
|
|
||||||
public static UnmodifiableConfig makeRule(String host, Action action) {
|
public static UnmodifiableConfig makeRule(String host, Action action) {
|
||||||
var config = InMemoryCommentedFormat.defaultInstance().createConfig(ConcurrentHashMap::new);
|
var config = InMemoryCommentedFormat.defaultInstance().createConfig(ConcurrentHashMap::new);
|
||||||
config.add("host", host);
|
config.add("host", host);
|
||||||
@ -85,7 +88,7 @@ public class AddressRuleConfig {
|
|||||||
var value = config.get(field);
|
var value = config.get(field);
|
||||||
if (value == null || klass.isInstance(value)) return true;
|
if (value == null || klass.isInstance(value)) return true;
|
||||||
|
|
||||||
ComputerCraft.log.warn("HTTP rule's {} is not a {}.", field, klass.getSimpleName());
|
LOG.warn("HTTP rule's {} is not a {}.", field, klass.getSimpleName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,12 +97,12 @@ public class AddressRuleConfig {
|
|||||||
if (value == null) return true;
|
if (value == null) return true;
|
||||||
|
|
||||||
if (!(value instanceof String)) {
|
if (!(value instanceof String)) {
|
||||||
ComputerCraft.log.warn("HTTP rule's {} is not a string", field);
|
LOG.warn("HTTP rule's {} is not a string", field);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parseEnum(klass, (String) value) == null) {
|
if (parseEnum(klass, (String) value) == null) {
|
||||||
ComputerCraft.log.warn("HTTP rule's {} is not a known option", field);
|
LOG.warn("HTTP rule's {} is not a known option", field);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
54
src/main/java/dan200/computercraft/shared/config/Config.java
Normal file
54
src/main/java/dan200/computercraft/shared/config/Config.java
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of ComputerCraft - http://www.computercraft.info
|
||||||
|
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
||||||
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
|
*/
|
||||||
|
package dan200.computercraft.shared.config;
|
||||||
|
|
||||||
|
import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ComputerCraft's global config.
|
||||||
|
*
|
||||||
|
* @see ConfigSpec The definition of our config values.
|
||||||
|
*/
|
||||||
|
public final class Config {
|
||||||
|
public static int computerSpaceLimit = 1000 * 1000;
|
||||||
|
public static int floppySpaceLimit = 125 * 1000;
|
||||||
|
public static boolean commandRequireCreative = true;
|
||||||
|
|
||||||
|
public static int computerThreads = 1;
|
||||||
|
|
||||||
|
public static boolean enableCommandBlock = false;
|
||||||
|
public static int modemRange = 64;
|
||||||
|
public static int modemHighAltitudeRange = 384;
|
||||||
|
public static int modemRangeDuringStorm = 64;
|
||||||
|
public static int modemHighAltitudeRangeDuringStorm = 384;
|
||||||
|
public static int maxNotesPerTick = 8;
|
||||||
|
public static MonitorRenderer monitorRenderer = MonitorRenderer.BEST;
|
||||||
|
public static int monitorDistance = 65;
|
||||||
|
public static long monitorBandwidth = 1_000_000;
|
||||||
|
|
||||||
|
public static boolean turtlesNeedFuel = true;
|
||||||
|
public static int turtleFuelLimit = 20000;
|
||||||
|
public static int advancedTurtleFuelLimit = 100000;
|
||||||
|
public static boolean turtlesObeyBlockProtection = true;
|
||||||
|
public static boolean turtlesCanPush = true;
|
||||||
|
|
||||||
|
public static int computerTermWidth = 51;
|
||||||
|
public static int computerTermHeight = 19;
|
||||||
|
|
||||||
|
public static final int turtleTermWidth = 39;
|
||||||
|
public static final int turtleTermHeight = 13;
|
||||||
|
|
||||||
|
public static int pocketTermWidth = 26;
|
||||||
|
public static int pocketTermHeight = 20;
|
||||||
|
|
||||||
|
public static int monitorWidth = 8;
|
||||||
|
public static int monitorHeight = 6;
|
||||||
|
|
||||||
|
public static int uploadNagDelay = 5;
|
||||||
|
|
||||||
|
private Config() {
|
||||||
|
}
|
||||||
|
}
|
@ -3,10 +3,10 @@
|
|||||||
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
* Copyright Daniel Ratcliffe, 2011-2022. Do not distribute without permission.
|
||||||
* Send enquiries to dratcliffe@gmail.com
|
* Send enquiries to dratcliffe@gmail.com
|
||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared;
|
package dan200.computercraft.shared.config;
|
||||||
|
|
||||||
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
import com.electronwill.nightconfig.core.UnmodifiableConfig;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.core.CoreConfig;
|
import dan200.computercraft.core.CoreConfig;
|
||||||
import dan200.computercraft.core.Logging;
|
import dan200.computercraft.core.Logging;
|
||||||
import dan200.computercraft.core.apis.http.NetworkUtils;
|
import dan200.computercraft.core.apis.http.NetworkUtils;
|
||||||
@ -25,7 +25,7 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public final class Config {
|
public final class ConfigSpec {
|
||||||
private static final int MODEM_MAX_RANGE = 100000;
|
private static final int MODEM_MAX_RANGE = 100000;
|
||||||
|
|
||||||
private static final String TRANSLATION_PREFIX = "gui.computercraft.config.";
|
private static final String TRANSLATION_PREFIX = "gui.computercraft.config.";
|
||||||
@ -84,7 +84,7 @@ public final class Config {
|
|||||||
|
|
||||||
private static MarkerFilter logFilter = MarkerFilter.createFilter(Logging.COMPUTER_ERROR.getName(), Filter.Result.ACCEPT, Filter.Result.NEUTRAL);
|
private static MarkerFilter logFilter = MarkerFilter.createFilter(Logging.COMPUTER_ERROR.getName(), Filter.Result.ACCEPT, Filter.Result.NEUTRAL);
|
||||||
|
|
||||||
private Config() {
|
private ConfigSpec() {
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -96,12 +96,12 @@ public final class Config {
|
|||||||
computerSpaceLimit = builder
|
computerSpaceLimit = builder
|
||||||
.comment("The disk space limit for computers and turtles, in bytes.")
|
.comment("The disk space limit for computers and turtles, in bytes.")
|
||||||
.translation(TRANSLATION_PREFIX + "computer_space_limit")
|
.translation(TRANSLATION_PREFIX + "computer_space_limit")
|
||||||
.define("computer_space_limit", ComputerCraft.computerSpaceLimit);
|
.define("computer_space_limit", Config.computerSpaceLimit);
|
||||||
|
|
||||||
floppySpaceLimit = builder
|
floppySpaceLimit = builder
|
||||||
.comment("The disk space limit for floppy disks, in bytes.")
|
.comment("The disk space limit for floppy disks, in bytes.")
|
||||||
.translation(TRANSLATION_PREFIX + "floppy_space_limit")
|
.translation(TRANSLATION_PREFIX + "floppy_space_limit")
|
||||||
.define("floppy_space_limit", ComputerCraft.floppySpaceLimit);
|
.define("floppy_space_limit", Config.floppySpaceLimit);
|
||||||
|
|
||||||
maximumFilesOpen = builder
|
maximumFilesOpen = builder
|
||||||
.comment("Set how many files a computer can have open at the same time. Set to 0 for unlimited.")
|
.comment("Set how many files a computer can have open at the same time. Set to 0 for unlimited.")
|
||||||
@ -132,7 +132,7 @@ public final class Config {
|
|||||||
.comment("""
|
.comment("""
|
||||||
Require players to be in creative mode and be opped in order to interact with
|
Require players to be in creative mode and be opped in order to interact with
|
||||||
command computers. This is the default behaviour for vanilla's Command blocks.""")
|
command computers. This is the default behaviour for vanilla's Command blocks.""")
|
||||||
.define("command_require_creative", ComputerCraft.commandRequireCreative);
|
.define("command_require_creative", Config.commandRequireCreative);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -147,7 +147,7 @@ public final class Config {
|
|||||||
computers can run at once, but may induce lag. Please note that some mods may
|
computers can run at once, but may induce lag. Please note that some mods may
|
||||||
not work with a thread count higher than 1. Use with caution.""")
|
not work with a thread count higher than 1. Use with caution.""")
|
||||||
.worldRestart()
|
.worldRestart()
|
||||||
.defineInRange("computer_threads", ComputerCraft.computerThreads, 1, Integer.MAX_VALUE);
|
.defineInRange("computer_threads", Config.computerThreads, 1, Integer.MAX_VALUE);
|
||||||
|
|
||||||
maxMainGlobalTime = builder
|
maxMainGlobalTime = builder
|
||||||
.comment("""
|
.comment("""
|
||||||
@ -230,27 +230,27 @@ public final class Config {
|
|||||||
|
|
||||||
commandBlockEnabled = builder
|
commandBlockEnabled = builder
|
||||||
.comment("Enable Command Block peripheral support")
|
.comment("Enable Command Block peripheral support")
|
||||||
.define("command_block_enabled", ComputerCraft.enableCommandBlock);
|
.define("command_block_enabled", Config.enableCommandBlock);
|
||||||
|
|
||||||
modemRange = builder
|
modemRange = builder
|
||||||
.comment("The range of Wireless Modems at low altitude in clear weather, in meters.")
|
.comment("The range of Wireless Modems at low altitude in clear weather, in meters.")
|
||||||
.defineInRange("modem_range", ComputerCraft.modemRange, 0, MODEM_MAX_RANGE);
|
.defineInRange("modem_range", Config.modemRange, 0, MODEM_MAX_RANGE);
|
||||||
|
|
||||||
modemHighAltitudeRange = builder
|
modemHighAltitudeRange = builder
|
||||||
.comment("The range of Wireless Modems at maximum altitude in clear weather, in meters.")
|
.comment("The range of Wireless Modems at maximum altitude in clear weather, in meters.")
|
||||||
.defineInRange("modem_high_altitude_range", ComputerCraft.modemHighAltitudeRange, 0, MODEM_MAX_RANGE);
|
.defineInRange("modem_high_altitude_range", Config.modemHighAltitudeRange, 0, MODEM_MAX_RANGE);
|
||||||
|
|
||||||
modemRangeDuringStorm = builder
|
modemRangeDuringStorm = builder
|
||||||
.comment("The range of Wireless Modems at low altitude in stormy weather, in meters.")
|
.comment("The range of Wireless Modems at low altitude in stormy weather, in meters.")
|
||||||
.defineInRange("modem_range_during_storm", ComputerCraft.modemRangeDuringStorm, 0, MODEM_MAX_RANGE);
|
.defineInRange("modem_range_during_storm", Config.modemRangeDuringStorm, 0, MODEM_MAX_RANGE);
|
||||||
|
|
||||||
modemHighAltitudeRangeDuringStorm = builder
|
modemHighAltitudeRangeDuringStorm = builder
|
||||||
.comment("The range of Wireless Modems at maximum altitude in stormy weather, in meters.")
|
.comment("The range of Wireless Modems at maximum altitude in stormy weather, in meters.")
|
||||||
.defineInRange("modem_high_altitude_range_during_storm", ComputerCraft.modemHighAltitudeRangeDuringStorm, 0, MODEM_MAX_RANGE);
|
.defineInRange("modem_high_altitude_range_during_storm", Config.modemHighAltitudeRangeDuringStorm, 0, MODEM_MAX_RANGE);
|
||||||
|
|
||||||
maxNotesPerTick = builder
|
maxNotesPerTick = builder
|
||||||
.comment("Maximum amount of notes a speaker can play at once.")
|
.comment("Maximum amount of notes a speaker can play at once.")
|
||||||
.defineInRange("max_notes_per_tick", ComputerCraft.maxNotesPerTick, 1, Integer.MAX_VALUE);
|
.defineInRange("max_notes_per_tick", Config.maxNotesPerTick, 1, Integer.MAX_VALUE);
|
||||||
|
|
||||||
monitorBandwidth = builder
|
monitorBandwidth = builder
|
||||||
.comment("""
|
.comment("""
|
||||||
@ -262,7 +262,7 @@ public final class Config {
|
|||||||
- A full sized monitor sends ~25kb of data. So the default (1MB) allows for ~40
|
- A full sized monitor sends ~25kb of data. So the default (1MB) allows for ~40
|
||||||
monitors to be updated in a single tick.
|
monitors to be updated in a single tick.
|
||||||
Set to 0 to disable.""")
|
Set to 0 to disable.""")
|
||||||
.defineInRange("monitor_bandwidth", (int) ComputerCraft.monitorBandwidth, 0, Integer.MAX_VALUE);
|
.defineInRange("monitor_bandwidth", (int) Config.monitorBandwidth, 0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
builder.pop();
|
builder.pop();
|
||||||
}
|
}
|
||||||
@ -273,27 +273,27 @@ public final class Config {
|
|||||||
|
|
||||||
turtlesNeedFuel = builder
|
turtlesNeedFuel = builder
|
||||||
.comment("Set whether Turtles require fuel to move.")
|
.comment("Set whether Turtles require fuel to move.")
|
||||||
.define("need_fuel", ComputerCraft.turtlesNeedFuel);
|
.define("need_fuel", Config.turtlesNeedFuel);
|
||||||
|
|
||||||
turtleFuelLimit = builder
|
turtleFuelLimit = builder
|
||||||
.comment("The fuel limit for Turtles.")
|
.comment("The fuel limit for Turtles.")
|
||||||
.defineInRange("normal_fuel_limit", ComputerCraft.turtleFuelLimit, 0, Integer.MAX_VALUE);
|
.defineInRange("normal_fuel_limit", Config.turtleFuelLimit, 0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
advancedTurtleFuelLimit = builder
|
advancedTurtleFuelLimit = builder
|
||||||
.comment("The fuel limit for Advanced Turtles.")
|
.comment("The fuel limit for Advanced Turtles.")
|
||||||
.defineInRange("advanced_fuel_limit", ComputerCraft.advancedTurtleFuelLimit, 0, Integer.MAX_VALUE);
|
.defineInRange("advanced_fuel_limit", Config.advancedTurtleFuelLimit, 0, Integer.MAX_VALUE);
|
||||||
|
|
||||||
turtlesObeyBlockProtection = builder
|
turtlesObeyBlockProtection = builder
|
||||||
.comment("""
|
.comment("""
|
||||||
If set to true, Turtles will be unable to build, dig, or enter protected areas
|
If set to true, Turtles will be unable to build, dig, or enter protected areas
|
||||||
(such as near the server spawn point).""")
|
(such as near the server spawn point).""")
|
||||||
.define("obey_block_protection", ComputerCraft.turtlesObeyBlockProtection);
|
.define("obey_block_protection", Config.turtlesObeyBlockProtection);
|
||||||
|
|
||||||
turtlesCanPush = builder
|
turtlesCanPush = builder
|
||||||
.comment("""
|
.comment("""
|
||||||
If set to true, Turtles will push entities out of the way instead of stopping if
|
If set to true, Turtles will push entities out of the way instead of stopping if
|
||||||
there is space to do so.""")
|
there is space to do so.""")
|
||||||
.define("can_push", ComputerCraft.turtlesCanPush);
|
.define("can_push", Config.turtlesCanPush);
|
||||||
|
|
||||||
builder.pop();
|
builder.pop();
|
||||||
}
|
}
|
||||||
@ -306,18 +306,18 @@ public final class Config {
|
|||||||
.push("term_sizes");
|
.push("term_sizes");
|
||||||
|
|
||||||
builder.comment("Terminal size of computers.").push("computer");
|
builder.comment("Terminal size of computers.").push("computer");
|
||||||
computerTermWidth = builder.defineInRange("width", ComputerCraft.computerTermWidth, 1, 255);
|
computerTermWidth = builder.defineInRange("width", Config.computerTermWidth, 1, 255);
|
||||||
computerTermHeight = builder.defineInRange("height", ComputerCraft.computerTermHeight, 1, 255);
|
computerTermHeight = builder.defineInRange("height", Config.computerTermHeight, 1, 255);
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
|
||||||
builder.comment("Terminal size of pocket computers.").push("pocket_computer");
|
builder.comment("Terminal size of pocket computers.").push("pocket_computer");
|
||||||
pocketTermWidth = builder.defineInRange("width", ComputerCraft.pocketTermWidth, 1, 255);
|
pocketTermWidth = builder.defineInRange("width", Config.pocketTermWidth, 1, 255);
|
||||||
pocketTermHeight = builder.defineInRange("height", ComputerCraft.pocketTermHeight, 1, 255);
|
pocketTermHeight = builder.defineInRange("height", Config.pocketTermHeight, 1, 255);
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
|
||||||
builder.comment("Maximum size of monitors (in blocks).").push("monitor");
|
builder.comment("Maximum size of monitors (in blocks).").push("monitor");
|
||||||
monitorWidth = builder.defineInRange("width", ComputerCraft.monitorWidth, 1, 32);
|
monitorWidth = builder.defineInRange("width", Config.monitorWidth, 1, 32);
|
||||||
monitorHeight = builder.defineInRange("height", ComputerCraft.monitorHeight, 1, 32);
|
monitorHeight = builder.defineInRange("height", Config.monitorHeight, 1, 32);
|
||||||
builder.pop();
|
builder.pop();
|
||||||
|
|
||||||
builder.pop();
|
builder.pop();
|
||||||
@ -339,7 +339,7 @@ public final class Config {
|
|||||||
.defineInRange("monitor_distance", 64, 16, 1024);
|
.defineInRange("monitor_distance", 64, 16, 1024);
|
||||||
uploadNagDelay = clientBuilder
|
uploadNagDelay = clientBuilder
|
||||||
.comment("The delay in seconds after which we'll notify about unhandled imports. Set to 0 to disable.")
|
.comment("The delay in seconds after which we'll notify about unhandled imports. Set to 0 to disable.")
|
||||||
.defineInRange("upload_nag_delay", ComputerCraft.uploadNagDelay, 0, 60);
|
.defineInRange("upload_nag_delay", Config.uploadNagDelay, 0, 60);
|
||||||
|
|
||||||
clientSpec = clientBuilder.build();
|
clientSpec = clientBuilder.build();
|
||||||
}
|
}
|
||||||
@ -351,16 +351,16 @@ public final class Config {
|
|||||||
|
|
||||||
private static void syncServer() {
|
private static void syncServer() {
|
||||||
// General
|
// General
|
||||||
ComputerCraft.computerSpaceLimit = computerSpaceLimit.get();
|
Config.computerSpaceLimit = computerSpaceLimit.get();
|
||||||
ComputerCraft.floppySpaceLimit = floppySpaceLimit.get();
|
Config.floppySpaceLimit = floppySpaceLimit.get();
|
||||||
CoreConfig.maximumFilesOpen = maximumFilesOpen.get();
|
CoreConfig.maximumFilesOpen = maximumFilesOpen.get();
|
||||||
CoreConfig.disableLua51Features = disableLua51Features.get();
|
CoreConfig.disableLua51Features = disableLua51Features.get();
|
||||||
CoreConfig.defaultComputerSettings = defaultComputerSettings.get();
|
CoreConfig.defaultComputerSettings = defaultComputerSettings.get();
|
||||||
ComputerCraft.computerThreads = computerThreads.get();
|
Config.computerThreads = computerThreads.get();
|
||||||
ComputerCraft.commandRequireCreative = commandRequireCreative.get();
|
Config.commandRequireCreative = commandRequireCreative.get();
|
||||||
|
|
||||||
// Execution
|
// Execution
|
||||||
ComputerCraft.computerThreads = computerThreads.get();
|
Config.computerThreads = computerThreads.get();
|
||||||
CoreConfig.maxMainGlobalTime = TimeUnit.MILLISECONDS.toNanos(maxMainGlobalTime.get());
|
CoreConfig.maxMainGlobalTime = TimeUnit.MILLISECONDS.toNanos(maxMainGlobalTime.get());
|
||||||
CoreConfig.maxMainComputerTime = TimeUnit.MILLISECONDS.toNanos(maxMainComputerTime.get());
|
CoreConfig.maxMainComputerTime = TimeUnit.MILLISECONDS.toNanos(maxMainComputerTime.get());
|
||||||
|
|
||||||
@ -370,9 +370,9 @@ public final class Config {
|
|||||||
logComputerErrors.get() ? Filter.Result.ACCEPT : Filter.Result.DENY,
|
logComputerErrors.get() ? Filter.Result.ACCEPT : Filter.Result.DENY,
|
||||||
Filter.Result.NEUTRAL
|
Filter.Result.NEUTRAL
|
||||||
);
|
);
|
||||||
if (!logFilter.equals(Config.logFilter)) {
|
if (!logFilter.equals(ConfigSpec.logFilter)) {
|
||||||
LoggerContext.getContext().removeFilter(Config.logFilter);
|
LoggerContext.getContext().removeFilter(ConfigSpec.logFilter);
|
||||||
LoggerContext.getContext().addFilter(Config.logFilter = logFilter);
|
LoggerContext.getContext().addFilter(ConfigSpec.logFilter = logFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTP
|
// HTTP
|
||||||
@ -388,38 +388,38 @@ public final class Config {
|
|||||||
NetworkUtils.reloadConfig();
|
NetworkUtils.reloadConfig();
|
||||||
|
|
||||||
// Peripheral
|
// Peripheral
|
||||||
ComputerCraft.enableCommandBlock = commandBlockEnabled.get();
|
Config.enableCommandBlock = commandBlockEnabled.get();
|
||||||
ComputerCraft.maxNotesPerTick = maxNotesPerTick.get();
|
Config.maxNotesPerTick = maxNotesPerTick.get();
|
||||||
ComputerCraft.modemRange = modemRange.get();
|
Config.modemRange = modemRange.get();
|
||||||
ComputerCraft.modemHighAltitudeRange = modemHighAltitudeRange.get();
|
Config.modemHighAltitudeRange = modemHighAltitudeRange.get();
|
||||||
ComputerCraft.modemRangeDuringStorm = modemRangeDuringStorm.get();
|
Config.modemRangeDuringStorm = modemRangeDuringStorm.get();
|
||||||
ComputerCraft.modemHighAltitudeRangeDuringStorm = modemHighAltitudeRangeDuringStorm.get();
|
Config.modemHighAltitudeRangeDuringStorm = modemHighAltitudeRangeDuringStorm.get();
|
||||||
ComputerCraft.monitorBandwidth = monitorBandwidth.get();
|
Config.monitorBandwidth = monitorBandwidth.get();
|
||||||
|
|
||||||
// Turtles
|
// Turtles
|
||||||
ComputerCraft.turtlesNeedFuel = turtlesNeedFuel.get();
|
Config.turtlesNeedFuel = turtlesNeedFuel.get();
|
||||||
ComputerCraft.turtleFuelLimit = turtleFuelLimit.get();
|
Config.turtleFuelLimit = turtleFuelLimit.get();
|
||||||
ComputerCraft.advancedTurtleFuelLimit = advancedTurtleFuelLimit.get();
|
Config.advancedTurtleFuelLimit = advancedTurtleFuelLimit.get();
|
||||||
ComputerCraft.turtlesObeyBlockProtection = turtlesObeyBlockProtection.get();
|
Config.turtlesObeyBlockProtection = turtlesObeyBlockProtection.get();
|
||||||
ComputerCraft.turtlesCanPush = turtlesCanPush.get();
|
Config.turtlesCanPush = turtlesCanPush.get();
|
||||||
|
|
||||||
// Terminal size
|
// Terminal size
|
||||||
ComputerCraft.computerTermWidth = computerTermWidth.get();
|
Config.computerTermWidth = computerTermWidth.get();
|
||||||
ComputerCraft.computerTermHeight = computerTermHeight.get();
|
Config.computerTermHeight = computerTermHeight.get();
|
||||||
ComputerCraft.pocketTermWidth = pocketTermWidth.get();
|
Config.pocketTermWidth = pocketTermWidth.get();
|
||||||
ComputerCraft.pocketTermHeight = pocketTermHeight.get();
|
Config.pocketTermHeight = pocketTermHeight.get();
|
||||||
ComputerCraft.monitorWidth = monitorWidth.get();
|
Config.monitorWidth = monitorWidth.get();
|
||||||
ComputerCraft.monitorHeight = monitorHeight.get();
|
Config.monitorHeight = monitorHeight.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void syncClient() {
|
private static void syncClient() {
|
||||||
ComputerCraft.monitorRenderer = monitorRenderer.get();
|
Config.monitorRenderer = monitorRenderer.get();
|
||||||
ComputerCraft.monitorDistance = monitorDistance.get();
|
Config.monitorDistance = monitorDistance.get();
|
||||||
ComputerCraft.uploadNagDelay = uploadNagDelay.get();
|
Config.uploadNagDelay = uploadNagDelay.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sync(ModConfig config) {
|
public static void sync(ModConfig config) {
|
||||||
if (!config.getModId().equals(ComputerCraft.MOD_ID)) return;
|
if (!config.getModId().equals(ComputerCraftAPI.MOD_ID)) return;
|
||||||
if (config.getType() == ModConfig.Type.SERVER) syncServer();
|
if (config.getType() == ModConfig.Type.SERVER) syncServer();
|
||||||
if (config.getType() == ModConfig.Type.CLIENT) syncClient();
|
if (config.getType() == ModConfig.Type.CLIENT) syncClient();
|
||||||
}
|
}
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.integration;
|
package dan200.computercraft.shared.integration;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.PocketUpgrades;
|
import dan200.computercraft.shared.PocketUpgrades;
|
||||||
import dan200.computercraft.shared.TurtleUpgrades;
|
import dan200.computercraft.shared.TurtleUpgrades;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
@ -35,7 +35,7 @@ public final class RecipeModHelpers {
|
|||||||
* @return Whether it should be removed.
|
* @return Whether it should be removed.
|
||||||
*/
|
*/
|
||||||
public static boolean shouldRemoveRecipe(ResourceLocation id) {
|
public static boolean shouldRemoveRecipe(ResourceLocation id) {
|
||||||
if (!id.getNamespace().equals(ComputerCraft.MOD_ID)) return false;
|
if (!id.getNamespace().equals(ComputerCraftAPI.MOD_ID)) return false;
|
||||||
|
|
||||||
var path = id.getPath();
|
var path = id.getPath();
|
||||||
return path.startsWith("turtle_normal/") || path.startsWith("turtle_advanced/")
|
return path.startsWith("turtle_normal/") || path.startsWith("turtle_advanced/")
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.integration;
|
package dan200.computercraft.shared.integration;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||||
import dan200.computercraft.api.turtle.TurtleSide;
|
import dan200.computercraft.api.turtle.TurtleSide;
|
||||||
@ -38,8 +38,8 @@ import static dan200.computercraft.shared.integration.RecipeModHelpers.MAIN_FAMI
|
|||||||
* @see RecipeModHelpers
|
* @see RecipeModHelpers
|
||||||
*/
|
*/
|
||||||
public class UpgradeRecipeGenerator<T> {
|
public class UpgradeRecipeGenerator<T> {
|
||||||
private static final ResourceLocation TURTLE_UPGRADE = new ResourceLocation(ComputerCraft.MOD_ID, "turtle_upgrade");
|
private static final ResourceLocation TURTLE_UPGRADE = new ResourceLocation(ComputerCraftAPI.MOD_ID, "turtle_upgrade");
|
||||||
private static final ResourceLocation POCKET_UPGRADE = new ResourceLocation(ComputerCraft.MOD_ID, "pocket_upgrade");
|
private static final ResourceLocation POCKET_UPGRADE = new ResourceLocation(ComputerCraftAPI.MOD_ID, "pocket_upgrade");
|
||||||
|
|
||||||
private final Function<CraftingRecipe, T> wrap;
|
private final Function<CraftingRecipe, T> wrap;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.integration.jei;
|
package dan200.computercraft.shared.integration.jei;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.turtle.TurtleSide;
|
import dan200.computercraft.api.turtle.TurtleSide;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import dan200.computercraft.shared.integration.RecipeModHelpers;
|
import dan200.computercraft.shared.integration.RecipeModHelpers;
|
||||||
@ -29,7 +29,7 @@ import java.util.Collections;
|
|||||||
public class JEIComputerCraft implements IModPlugin {
|
public class JEIComputerCraft implements IModPlugin {
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getPluginUid() {
|
public ResourceLocation getPluginUid() {
|
||||||
return new ResourceLocation(ComputerCraft.MOD_ID, "jei");
|
return new ResourceLocation(ComputerCraftAPI.MOD_ID, "jei");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -5,13 +5,13 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.media.items;
|
package dan200.computercraft.shared.media.items;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
import dan200.computercraft.core.util.Colour;
|
import dan200.computercraft.core.util.Colour;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import dan200.computercraft.shared.common.IColouredItem;
|
import dan200.computercraft.shared.common.IColouredItem;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.NonNullList;
|
import net.minecraft.core.NonNullList;
|
||||||
@ -88,7 +88,7 @@ public class ItemDisk extends Item implements IMedia, IColouredItem {
|
|||||||
diskID = ComputerCraftAPI.createUniqueNumberedSaveDir(world, "disk");
|
diskID = ComputerCraftAPI.createUniqueNumberedSaveDir(world, "disk");
|
||||||
setDiskID(stack, diskID);
|
setDiskID(stack, diskID);
|
||||||
}
|
}
|
||||||
return ComputerCraftAPI.createSaveDirMount(world, "disk/" + diskID, ComputerCraft.floppySpaceLimit);
|
return ComputerCraftAPI.createSaveDirMount(world, "disk/" + diskID, Config.floppySpaceLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getDiskID(ItemStack stack) {
|
public static int getDiskID(ItemStack stack) {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.generic.methods;
|
package dan200.computercraft.shared.peripheral.generic.methods;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.lua.LuaFunction;
|
import dan200.computercraft.api.lua.LuaFunction;
|
||||||
import dan200.computercraft.api.peripheral.GenericPeripheral;
|
import dan200.computercraft.api.peripheral.GenericPeripheral;
|
||||||
import dan200.computercraft.api.peripheral.PeripheralType;
|
import dan200.computercraft.api.peripheral.PeripheralType;
|
||||||
@ -33,7 +33,7 @@ public class EnergyMethods implements GenericPeripheral {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation id() {
|
public ResourceLocation id() {
|
||||||
return new ResourceLocation(ComputerCraft.MOD_ID, "energy");
|
return new ResourceLocation(ComputerCraftAPI.MOD_ID, "energy");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.generic.methods;
|
package dan200.computercraft.shared.peripheral.generic.methods;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.detail.ForgeDetailRegistries;
|
import dan200.computercraft.api.detail.ForgeDetailRegistries;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
import dan200.computercraft.api.lua.LuaFunction;
|
import dan200.computercraft.api.lua.LuaFunction;
|
||||||
@ -41,7 +41,7 @@ public class FluidMethods implements GenericPeripheral {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation id() {
|
public ResourceLocation id() {
|
||||||
return new ResourceLocation(ComputerCraft.MOD_ID, "fluid");
|
return new ResourceLocation(ComputerCraftAPI.MOD_ID, "fluid");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.generic.methods;
|
package dan200.computercraft.shared.peripheral.generic.methods;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.detail.VanillaDetailRegistries;
|
import dan200.computercraft.api.detail.VanillaDetailRegistries;
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
import dan200.computercraft.api.lua.ILuaContext;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
@ -43,7 +43,7 @@ public class InventoryMethods implements GenericPeripheral {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation id() {
|
public ResourceLocation id() {
|
||||||
return new ResourceLocation(ComputerCraft.MOD_ID, "inventory");
|
return new ResourceLocation(ComputerCraftAPI.MOD_ID, "inventory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.shared.peripheral.modem.wired;
|
package dan200.computercraft.shared.peripheral.modem.wired;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.api.filesystem.IWritableMount;
|
import dan200.computercraft.api.filesystem.IWritableMount;
|
||||||
import dan200.computercraft.api.lua.*;
|
import dan200.computercraft.api.lua.*;
|
||||||
@ -23,6 +22,8 @@ import dan200.computercraft.core.util.LuaUtil;
|
|||||||
import dan200.computercraft.shared.peripheral.modem.ModemPeripheral;
|
import dan200.computercraft.shared.peripheral.modem.ModemPeripheral;
|
||||||
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -30,6 +31,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
public abstract class WiredModemPeripheral extends ModemPeripheral implements IWiredSender {
|
public abstract class WiredModemPeripheral extends ModemPeripheral implements IWiredSender {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(WiredModemPeripheral.class);
|
||||||
|
|
||||||
private final WiredModemElement modem;
|
private final WiredModemElement modem;
|
||||||
|
|
||||||
private final Map<IComputerAccess, ConcurrentMap<String, RemotePeripheralWrapper>> peripheralWrappers = new HashMap<>(1);
|
private final Map<IComputerAccess, ConcurrentMap<String, RemotePeripheralWrapper>> peripheralWrappers = new HashMap<>(1);
|
||||||
@ -334,7 +337,7 @@ public abstract class WiredModemPeripheral extends ModemPeripheral implements IW
|
|||||||
|
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (!mounts.isEmpty()) {
|
if (!mounts.isEmpty()) {
|
||||||
ComputerCraft.log.warn("Peripheral {} called mount but did not call unmount for {}", peripheral, mounts);
|
LOG.warn("Peripheral {} called mount but did not call unmount for {}", peripheral, mounts);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var mount : mounts) computer.unmount(mount);
|
for (var mount : mounts) computer.unmount(mount);
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.modem.wireless;
|
package dan200.computercraft.shared.peripheral.modem.wireless;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.network.IPacketNetwork;
|
import dan200.computercraft.api.network.IPacketNetwork;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.peripheral.modem.ModemPeripheral;
|
import dan200.computercraft.shared.peripheral.modem.ModemPeripheral;
|
||||||
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
import dan200.computercraft.shared.peripheral.modem.ModemState;
|
||||||
|
|
||||||
@ -35,11 +35,11 @@ public abstract class WirelessModemPeripheral extends ModemPeripheral {
|
|||||||
var world = getLevel();
|
var world = getLevel();
|
||||||
if (world != null) {
|
if (world != null) {
|
||||||
var position = getPosition();
|
var position = getPosition();
|
||||||
double minRange = ComputerCraft.modemRange;
|
double minRange = Config.modemRange;
|
||||||
double maxRange = ComputerCraft.modemHighAltitudeRange;
|
double maxRange = Config.modemHighAltitudeRange;
|
||||||
if (world.isRaining() && world.isThundering()) {
|
if (world.isRaining() && world.isThundering()) {
|
||||||
minRange = ComputerCraft.modemRangeDuringStorm;
|
minRange = Config.modemRangeDuringStorm;
|
||||||
maxRange = ComputerCraft.modemHighAltitudeRangeDuringStorm;
|
maxRange = Config.modemHighAltitudeRangeDuringStorm;
|
||||||
}
|
}
|
||||||
if (position.y > 96.0 && maxRange > minRange) {
|
if (position.y > 96.0 && maxRange > minRange) {
|
||||||
return minRange + (position.y - 96.0) * ((maxRange - minRange) / ((world.getMaxBuildHeight() - 1) - 96.0));
|
return minRange + (position.y - 96.0) * ((maxRange - minRange) / ((world.getMaxBuildHeight() - 1) - 96.0));
|
||||||
|
@ -5,9 +5,11 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.monitor;
|
package dan200.computercraft.shared.peripheral.monitor;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.shared.config.Config;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@ -15,6 +17,8 @@ import java.util.Objects;
|
|||||||
* Expands a monitor into available space. This tries to expand in each direction until a fixed point is reached.
|
* Expands a monitor into available space. This tries to expand in each direction until a fixed point is reached.
|
||||||
*/
|
*/
|
||||||
class Expander {
|
class Expander {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(Expander.class);
|
||||||
|
|
||||||
private final Level level;
|
private final Level level;
|
||||||
private final Direction down;
|
private final Direction down;
|
||||||
private final Direction right;
|
private final Direction right;
|
||||||
@ -40,13 +44,13 @@ class Expander {
|
|||||||
// if we merge right/down and the next monitor has a width/height of 0. This /should/ never happen - validation
|
// if we merge right/down and the next monitor has a width/height of 0. This /should/ never happen - validation
|
||||||
// will catch it - but I also have a complete lack of faith in the code.
|
// will catch it - but I also have a complete lack of faith in the code.
|
||||||
// As an aside, I think the actual limit is width+height resizes, but again - complete lack of faith.
|
// As an aside, I think the actual limit is width+height resizes, but again - complete lack of faith.
|
||||||
var changeLimit = ComputerCraft.monitorWidth * ComputerCraft.monitorHeight + 1;
|
var changeLimit = Config.monitorWidth * Config.monitorHeight + 1;
|
||||||
while (expandIn(true, false) || expandIn(true, true) ||
|
while (expandIn(true, false) || expandIn(true, true) ||
|
||||||
expandIn(false, false) || expandIn(false, true)
|
expandIn(false, false) || expandIn(false, true)
|
||||||
) {
|
) {
|
||||||
changedCount++;
|
changedCount++;
|
||||||
if (changedCount > changeLimit) {
|
if (changedCount > changeLimit) {
|
||||||
ComputerCraft.log.error("Monitor has grown too much. This suggests there's an empty monitor in the world.");
|
LOG.error("Monitor has grown too much. This suggests there's an empty monitor in the world.");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,11 +77,11 @@ class Expander {
|
|||||||
if (useXAxis) {
|
if (useXAxis) {
|
||||||
if (otherMonitor.getYIndex() != 0 || otherMonitor.getHeight() != height) return false;
|
if (otherMonitor.getYIndex() != 0 || otherMonitor.getHeight() != height) return false;
|
||||||
width += otherMonitor.getWidth();
|
width += otherMonitor.getWidth();
|
||||||
if (width > ComputerCraft.monitorWidth) return false;
|
if (width > Config.monitorWidth) return false;
|
||||||
} else {
|
} else {
|
||||||
if (otherMonitor.getXIndex() != 0 || otherMonitor.getWidth() != width) return false;
|
if (otherMonitor.getXIndex() != 0 || otherMonitor.getWidth() != width) return false;
|
||||||
height += otherMonitor.getHeight();
|
height += otherMonitor.getHeight();
|
||||||
if (height > ComputerCraft.monitorHeight) return false;
|
if (height > Config.monitorHeight) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isPositive) {
|
if (!isPositive) {
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.monitor;
|
package dan200.computercraft.shared.peripheral.monitor;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.client.MonitorClientMessage;
|
import dan200.computercraft.shared.network.client.MonitorClientMessage;
|
||||||
import dan200.computercraft.shared.platform.PlatformHelper;
|
import dan200.computercraft.shared.platform.PlatformHelper;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
@ -48,7 +48,7 @@ public final class MonitorWatcher {
|
|||||||
public static void onTick() {
|
public static void onTick() {
|
||||||
// Find all enqueued monitors and send their contents to all nearby players.
|
// Find all enqueued monitors and send their contents to all nearby players.
|
||||||
|
|
||||||
var limit = ComputerCraft.monitorBandwidth;
|
var limit = Config.monitorBandwidth;
|
||||||
var obeyLimit = limit > 0;
|
var obeyLimit = limit > 0;
|
||||||
|
|
||||||
TileMonitor tile;
|
TileMonitor tile;
|
||||||
|
@ -6,12 +6,12 @@
|
|||||||
package dan200.computercraft.shared.peripheral.monitor;
|
package dan200.computercraft.shared.peripheral.monitor;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.core.terminal.Terminal;
|
import dan200.computercraft.core.terminal.Terminal;
|
||||||
import dan200.computercraft.shared.common.TileGeneric;
|
import dan200.computercraft.shared.common.TileGeneric;
|
||||||
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
import dan200.computercraft.shared.computer.terminal.TerminalState;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.util.TickScheduler;
|
import dan200.computercraft.shared.util.TickScheduler;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
@ -24,6 +24,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
|
|||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.phys.AABB;
|
import net.minecraft.world.phys.AABB;
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
import net.minecraft.world.phys.BlockHitResult;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -31,6 +33,8 @@ import java.util.Set;
|
|||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class TileMonitor extends TileGeneric {
|
public class TileMonitor extends TileGeneric {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(TileMonitor.class);
|
||||||
|
|
||||||
public static final double RENDER_BORDER = 2.0 / 16.0;
|
public static final double RENDER_BORDER = 2.0 / 16.0;
|
||||||
public static final double RENDER_MARGIN = 0.5 / 16.0;
|
public static final double RENDER_MARGIN = 0.5 / 16.0;
|
||||||
public static final double RENDER_PIXEL_SCALE = 1.0 / 64.0;
|
public static final double RENDER_PIXEL_SCALE = 1.0 / 64.0;
|
||||||
@ -251,7 +255,7 @@ public class TileMonitor extends TileGeneric {
|
|||||||
|
|
||||||
public final void read(TerminalState state) {
|
public final void read(TerminalState state) {
|
||||||
if (xIndex != 0 || yIndex != 0) {
|
if (xIndex != 0 || yIndex != 0) {
|
||||||
ComputerCraft.log.warn("Receiving monitor state for non-origin terminal at {}", getBlockPos());
|
LOG.warn("Receiving monitor state for non-origin terminal at {}", getBlockPos());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,8 +466,8 @@ public class TileMonitor extends TileGeneric {
|
|||||||
private void validate() {
|
private void validate() {
|
||||||
if (xIndex == 0 && yIndex == 0 && width == 1 && height == 1) return;
|
if (xIndex == 0 && yIndex == 0 && width == 1 && height == 1) return;
|
||||||
|
|
||||||
if (xIndex >= 0 && xIndex <= width && width > 0 && width <= ComputerCraft.monitorWidth &&
|
if (xIndex >= 0 && xIndex <= width && width > 0 && width <= Config.monitorWidth &&
|
||||||
yIndex >= 0 && yIndex <= height && height > 0 && height <= ComputerCraft.monitorHeight &&
|
yIndex >= 0 && yIndex <= height && height > 0 && height <= Config.monitorHeight &&
|
||||||
checkMonitorAt(0, 0) && checkMonitorAt(0, height - 1) &&
|
checkMonitorAt(0, 0) && checkMonitorAt(0, height - 1) &&
|
||||||
checkMonitorAt(width - 1, 0) && checkMonitorAt(width - 1, height - 1)) {
|
checkMonitorAt(width - 1, 0) && checkMonitorAt(width - 1, height - 1)) {
|
||||||
return;
|
return;
|
||||||
@ -471,7 +475,7 @@ public class TileMonitor extends TileGeneric {
|
|||||||
|
|
||||||
// Something in our monitor is invalid. For now, let's just reset ourselves and then try to integrate ourselves
|
// Something in our monitor is invalid. For now, let's just reset ourselves and then try to integrate ourselves
|
||||||
// later.
|
// later.
|
||||||
ComputerCraft.log.warn("Monitor is malformed, resetting to 1x1.");
|
LOG.warn("Monitor is malformed, resetting to 1x1.");
|
||||||
resize(1, 1);
|
resize(1, 1);
|
||||||
needsUpdate = true;
|
needsUpdate = true;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.peripheral.speaker;
|
package dan200.computercraft.shared.peripheral.speaker;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
import dan200.computercraft.api.lua.ILuaContext;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
import dan200.computercraft.api.lua.LuaFunction;
|
import dan200.computercraft.api.lua.LuaFunction;
|
||||||
@ -13,6 +12,7 @@ import dan200.computercraft.api.lua.LuaTable;
|
|||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.core.util.Nullability;
|
import dan200.computercraft.core.util.Nullability;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.client.SpeakerAudioClientMessage;
|
import dan200.computercraft.shared.network.client.SpeakerAudioClientMessage;
|
||||||
import dan200.computercraft.shared.network.client.SpeakerMoveClientMessage;
|
import dan200.computercraft.shared.network.client.SpeakerMoveClientMessage;
|
||||||
import dan200.computercraft.shared.network.client.SpeakerPlayClientMessage;
|
import dan200.computercraft.shared.network.client.SpeakerPlayClientMessage;
|
||||||
@ -217,7 +217,7 @@ public abstract class SpeakerPeripheral implements IPeripheral {
|
|||||||
if (instrument == null) throw new LuaException("Invalid instrument, \"" + instrument + "\"!");
|
if (instrument == null) throw new LuaException("Invalid instrument, \"" + instrument + "\"!");
|
||||||
|
|
||||||
synchronized (pendingNotes) {
|
synchronized (pendingNotes) {
|
||||||
if (pendingNotes.size() >= ComputerCraft.maxNotesPerTick) return false;
|
if (pendingNotes.size() >= Config.maxNotesPerTick) return false;
|
||||||
pendingNotes.add(new PendingSound(Registries.SOUND_EVENTS.getKey(instrument.getSoundEvent()), volume, (float) Math.pow(2.0, (pitch - 12.0) / 12.0)));
|
pendingNotes.add(new PendingSound(Registries.SOUND_EVENTS.getKey(instrument.getSoundEvent()), volume, (float) Math.pow(2.0, (pitch - 12.0) / 12.0)));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.pocket.core;
|
package dan200.computercraft.shared.pocket.core;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.pocket.IPocketAccess;
|
import dan200.computercraft.api.pocket.IPocketAccess;
|
||||||
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
import dan200.computercraft.api.pocket.IPocketUpgrade;
|
||||||
@ -13,6 +12,7 @@ import dan200.computercraft.core.computer.ComputerSide;
|
|||||||
import dan200.computercraft.shared.common.IColouredItem;
|
import dan200.computercraft.shared.common.IColouredItem;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.client.PocketComputerDataMessage;
|
import dan200.computercraft.shared.network.client.PocketComputerDataMessage;
|
||||||
import dan200.computercraft.shared.network.client.PocketComputerDeletedClientMessage;
|
import dan200.computercraft.shared.network.client.PocketComputerDeletedClientMessage;
|
||||||
import dan200.computercraft.shared.platform.PlatformHelper;
|
import dan200.computercraft.shared.platform.PlatformHelper;
|
||||||
@ -42,7 +42,7 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces
|
|||||||
private final Set<ServerPlayer> tracking = new HashSet<>();
|
private final Set<ServerPlayer> tracking = new HashSet<>();
|
||||||
|
|
||||||
public PocketServerComputer(ServerLevel world, BlockPos position, int computerID, @Nullable String label, ComputerFamily family) {
|
public PocketServerComputer(ServerLevel world, BlockPos position, int computerID, @Nullable String label, ComputerFamily family) {
|
||||||
super(world, position, computerID, label, family, ComputerCraft.pocketTermWidth, ComputerCraft.pocketTermHeight);
|
super(world, position, computerID, label, family, Config.pocketTermWidth, Config.pocketTermHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.shared.pocket.items;
|
package dan200.computercraft.shared.pocket.items;
|
||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.filesystem.IMount;
|
import dan200.computercraft.api.filesystem.IMount;
|
||||||
import dan200.computercraft.api.media.IMedia;
|
import dan200.computercraft.api.media.IMedia;
|
||||||
@ -17,6 +16,7 @@ import dan200.computercraft.shared.common.IColouredItem;
|
|||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import dan200.computercraft.shared.computer.core.ServerContext;
|
import dan200.computercraft.shared.computer.core.ServerContext;
|
||||||
import dan200.computercraft.shared.computer.items.IComputerItem;
|
import dan200.computercraft.shared.computer.items.IComputerItem;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.network.container.ComputerContainerData;
|
import dan200.computercraft.shared.network.container.ComputerContainerData;
|
||||||
import dan200.computercraft.shared.pocket.apis.PocketAPI;
|
import dan200.computercraft.shared.pocket.apis.PocketAPI;
|
||||||
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
import dan200.computercraft.shared.pocket.core.PocketServerComputer;
|
||||||
@ -185,7 +185,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia, I
|
|||||||
// If we're a non-vanilla, non-CC upgrade then return whichever mod this upgrade
|
// If we're a non-vanilla, non-CC upgrade then return whichever mod this upgrade
|
||||||
// belongs to.
|
// belongs to.
|
||||||
var mod = PocketUpgrades.instance().getOwner(upgrade);
|
var mod = PocketUpgrades.instance().getOwner(upgrade);
|
||||||
if (mod != null && !mod.equals(ComputerCraft.MOD_ID)) return mod;
|
if (mod != null && !mod.equals(ComputerCraftAPI.MOD_ID)) return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.getCreatorModId(stack);
|
return super.getCreatorModId(stack);
|
||||||
@ -267,7 +267,7 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia, I
|
|||||||
public @Nullable IMount createDataMount(ItemStack stack, Level world) {
|
public @Nullable IMount createDataMount(ItemStack stack, Level world) {
|
||||||
var id = getComputerID(stack);
|
var id = getComputerID(stack);
|
||||||
if (id >= 0) {
|
if (id >= 0) {
|
||||||
return ComputerCraftAPI.createSaveDirMount(world, "computer/" + id, ComputerCraft.computerSpaceLimit);
|
return ComputerCraftAPI.createSaveDirMount(world, "computer/" + id, Config.computerSpaceLimit);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.shared.turtle.blocks;
|
package dan200.computercraft.shared.turtle.blocks;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||||
@ -18,6 +17,7 @@ import dan200.computercraft.shared.computer.blocks.TileComputerBase;
|
|||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerState;
|
import dan200.computercraft.shared.computer.core.ComputerState;
|
||||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.turtle.apis.TurtleAPI;
|
import dan200.computercraft.shared.turtle.apis.TurtleAPI;
|
||||||
import dan200.computercraft.shared.turtle.core.TurtleBrain;
|
import dan200.computercraft.shared.turtle.core.TurtleBrain;
|
||||||
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
import dan200.computercraft.shared.turtle.inventory.ContainerTurtle;
|
||||||
@ -80,8 +80,8 @@ public class TileTurtle extends TileComputerBase implements ITurtleTile, Default
|
|||||||
protected ServerComputer createComputer(int id) {
|
protected ServerComputer createComputer(int id) {
|
||||||
var computer = new ServerComputer(
|
var computer = new ServerComputer(
|
||||||
(ServerLevel) getLevel(), getBlockPos(), id, label,
|
(ServerLevel) getLevel(), getBlockPos(), id, label,
|
||||||
getFamily(), ComputerCraft.turtleTermWidth,
|
getFamily(), Config.turtleTermWidth,
|
||||||
ComputerCraft.turtleTermHeight
|
Config.turtleTermHeight
|
||||||
);
|
);
|
||||||
computer.addAPI(new TurtleAPI(computer.getAPIEnvironment(), getAccess()));
|
computer.addAPI(new TurtleAPI(computer.getAPIEnvironment(), getAccess()));
|
||||||
brain.setupComputer(computer);
|
brain.setupComputer(computer);
|
||||||
|
@ -7,7 +7,6 @@ package dan200.computercraft.shared.turtle.core;
|
|||||||
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.lua.ILuaCallback;
|
import dan200.computercraft.api.lua.ILuaCallback;
|
||||||
import dan200.computercraft.api.lua.MethodResult;
|
import dan200.computercraft.api.lua.MethodResult;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
@ -17,6 +16,7 @@ import dan200.computercraft.core.util.Colour;
|
|||||||
import dan200.computercraft.shared.TurtleUpgrades;
|
import dan200.computercraft.shared.TurtleUpgrades;
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import dan200.computercraft.shared.computer.core.ServerComputer;
|
import dan200.computercraft.shared.computer.core.ServerComputer;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.platform.PlatformHelper;
|
import dan200.computercraft.shared.platform.PlatformHelper;
|
||||||
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
import dan200.computercraft.shared.turtle.blocks.TileTurtle;
|
||||||
import dan200.computercraft.shared.util.Holiday;
|
import dan200.computercraft.shared.util.Holiday;
|
||||||
@ -387,7 +387,7 @@ public class TurtleBrain implements ITurtleAccess {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isFuelNeeded() {
|
public boolean isFuelNeeded() {
|
||||||
return ComputerCraft.turtlesNeedFuel;
|
return Config.turtlesNeedFuel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -404,9 +404,9 @@ public class TurtleBrain implements ITurtleAccess {
|
|||||||
@Override
|
@Override
|
||||||
public int getFuelLimit() {
|
public int getFuelLimit() {
|
||||||
if (owner.getFamily() == ComputerFamily.ADVANCED) {
|
if (owner.getFamily() == ComputerFamily.ADVANCED) {
|
||||||
return ComputerCraft.advancedTurtleFuelLimit;
|
return Config.advancedTurtleFuelLimit;
|
||||||
} else {
|
} else {
|
||||||
return ComputerCraft.turtleFuelLimit;
|
return Config.turtleFuelLimit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -681,7 +681,7 @@ public class TurtleBrain implements ITurtleAccess {
|
|||||||
if (animation != TurtleAnimation.NONE) {
|
if (animation != TurtleAnimation.NONE) {
|
||||||
var world = getLevel();
|
var world = getLevel();
|
||||||
|
|
||||||
if (ComputerCraft.turtlesCanPush) {
|
if (Config.turtlesCanPush) {
|
||||||
// Advance entity pushing
|
// Advance entity pushing
|
||||||
if (animation == TurtleAnimation.MOVE_FORWARD ||
|
if (animation == TurtleAnimation.MOVE_FORWARD ||
|
||||||
animation == TurtleAnimation.MOVE_BACK ||
|
animation == TurtleAnimation.MOVE_BACK ||
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.turtle.core;
|
package dan200.computercraft.shared.turtle.core;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||||
import dan200.computercraft.api.turtle.ITurtleCommand;
|
import dan200.computercraft.api.turtle.ITurtleCommand;
|
||||||
import dan200.computercraft.api.turtle.TurtleAnimation;
|
import dan200.computercraft.api.turtle.TurtleAnimation;
|
||||||
import dan200.computercraft.api.turtle.TurtleCommandResult;
|
import dan200.computercraft.api.turtle.TurtleCommandResult;
|
||||||
import dan200.computercraft.shared.TurtlePermissions;
|
import dan200.computercraft.shared.TurtlePermissions;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.util.WorldUtil;
|
import dan200.computercraft.shared.util.WorldUtil;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
@ -58,7 +58,7 @@ public class TurtleMoveCommand implements ITurtleCommand {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!oldWorld.isUnobstructed(null, collision)) {
|
if (!oldWorld.isUnobstructed(null, collision)) {
|
||||||
if (!ComputerCraft.turtlesCanPush || this.direction == MoveDirection.UP || this.direction == MoveDirection.DOWN) {
|
if (!Config.turtlesCanPush || this.direction == MoveDirection.UP || this.direction == MoveDirection.DOWN) {
|
||||||
return TurtleCommandResult.failure("Movement obstructed");
|
return TurtleCommandResult.failure("Movement obstructed");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ public class TurtleMoveCommand implements ITurtleCommand {
|
|||||||
if (!world.isInWorldBounds(position)) return TurtleCommandResult.failure("Cannot leave the world");
|
if (!world.isInWorldBounds(position)) return TurtleCommandResult.failure("Cannot leave the world");
|
||||||
|
|
||||||
// Check spawn protection
|
// Check spawn protection
|
||||||
if (ComputerCraft.turtlesObeyBlockProtection && !TurtlePermissions.isBlockEnterable(world, position, turtlePlayer)) {
|
if (Config.turtlesObeyBlockProtection && !TurtlePermissions.isBlockEnterable(world, position, turtlePlayer)) {
|
||||||
return TurtleCommandResult.failure("Cannot enter protected area");
|
return TurtleCommandResult.failure("Cannot enter protected area");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,12 +5,12 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.turtle.core;
|
package dan200.computercraft.shared.turtle.core;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||||
import dan200.computercraft.api.turtle.ITurtleCommand;
|
import dan200.computercraft.api.turtle.ITurtleCommand;
|
||||||
import dan200.computercraft.api.turtle.TurtleAnimation;
|
import dan200.computercraft.api.turtle.TurtleAnimation;
|
||||||
import dan200.computercraft.api.turtle.TurtleCommandResult;
|
import dan200.computercraft.api.turtle.TurtleCommandResult;
|
||||||
import dan200.computercraft.shared.TurtlePermissions;
|
import dan200.computercraft.shared.TurtlePermissions;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.turtle.TurtleUtil;
|
import dan200.computercraft.shared.turtle.TurtleUtil;
|
||||||
import dan200.computercraft.shared.util.DropConsumer;
|
import dan200.computercraft.shared.util.DropConsumer;
|
||||||
import dan200.computercraft.shared.util.InventoryUtil;
|
import dan200.computercraft.shared.util.InventoryUtil;
|
||||||
@ -172,7 +172,7 @@ public class TurtlePlaceCommand implements ITurtleCommand {
|
|||||||
var replaceable = state.canBeReplaced(context);
|
var replaceable = state.canBeReplaced(context);
|
||||||
if (!allowReplaceable && replaceable) return false;
|
if (!allowReplaceable && replaceable) return false;
|
||||||
|
|
||||||
if (ComputerCraft.turtlesObeyBlockProtection) {
|
if (Config.turtlesObeyBlockProtection) {
|
||||||
// Check spawn protection
|
// Check spawn protection
|
||||||
var editable = replaceable
|
var editable = replaceable
|
||||||
? TurtlePermissions.isBlockEditable(world, position, player)
|
? TurtlePermissions.isBlockEditable(world, position, player)
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
package dan200.computercraft.shared.turtle.core;
|
package dan200.computercraft.shared.turtle.core;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.turtle.ITurtleAccess;
|
import dan200.computercraft.api.turtle.ITurtleAccess;
|
||||||
import dan200.computercraft.shared.turtle.TurtleUtil;
|
import dan200.computercraft.shared.turtle.TurtleUtil;
|
||||||
import dan200.computercraft.shared.util.DirectionUtil;
|
import dan200.computercraft.shared.util.DirectionUtil;
|
||||||
@ -25,12 +24,15 @@ import net.minecraft.world.item.ItemStack;
|
|||||||
import net.minecraft.world.level.block.entity.SignBlockEntity;
|
import net.minecraft.world.level.block.entity.SignBlockEntity;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.minecraftforge.common.util.FakePlayer;
|
import net.minecraftforge.common.util.FakePlayer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.OptionalInt;
|
import java.util.OptionalInt;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public final class TurtlePlayer extends FakePlayer {
|
public final class TurtlePlayer extends FakePlayer {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(TurtlePlayer.class);
|
||||||
private static final GameProfile DEFAULT_PROFILE = new GameProfile(
|
private static final GameProfile DEFAULT_PROFILE = new GameProfile(
|
||||||
UUID.fromString("0d0c4ca0-4ff1-11e4-916c-0800200c9a66"),
|
UUID.fromString("0d0c4ca0-4ff1-11e4-916c-0800200c9a66"),
|
||||||
"[ComputerCraft]"
|
"[ComputerCraft]"
|
||||||
@ -84,7 +86,7 @@ public final class TurtlePlayer extends FakePlayer {
|
|||||||
|
|
||||||
private void setState(ITurtleAccess turtle) {
|
private void setState(ITurtleAccess turtle) {
|
||||||
if (containerMenu != inventoryMenu) {
|
if (containerMenu != inventoryMenu) {
|
||||||
ComputerCraft.log.warn("Turtle has open container ({})", containerMenu);
|
LOG.warn("Turtle has open container ({})", containerMenu);
|
||||||
doCloseContainer();
|
doCloseContainer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.turtle.items;
|
package dan200.computercraft.shared.turtle.items;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
import dan200.computercraft.api.turtle.ITurtleUpgrade;
|
||||||
import dan200.computercraft.api.turtle.TurtleSide;
|
import dan200.computercraft.api.turtle.TurtleSide;
|
||||||
import dan200.computercraft.shared.TurtleUpgrades;
|
import dan200.computercraft.shared.TurtleUpgrades;
|
||||||
@ -97,13 +97,13 @@ public class ItemTurtle extends ItemComputerBase implements ITurtleItem {
|
|||||||
var left = getUpgrade(stack, TurtleSide.LEFT);
|
var left = getUpgrade(stack, TurtleSide.LEFT);
|
||||||
if (left != null) {
|
if (left != null) {
|
||||||
var mod = TurtleUpgrades.instance().getOwner(left);
|
var mod = TurtleUpgrades.instance().getOwner(left);
|
||||||
if (mod != null && !mod.equals(ComputerCraft.MOD_ID)) return mod;
|
if (mod != null && !mod.equals(ComputerCraftAPI.MOD_ID)) return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
var right = getUpgrade(stack, TurtleSide.RIGHT);
|
var right = getUpgrade(stack, TurtleSide.RIGHT);
|
||||||
if (right != null) {
|
if (right != null) {
|
||||||
var mod = TurtleUpgrades.instance().getOwner(right);
|
var mod = TurtleUpgrades.instance().getOwner(right);
|
||||||
if (mod != null && !mod.equals(ComputerCraft.MOD_ID)) return mod;
|
if (mod != null && !mod.equals(ComputerCraftAPI.MOD_ID)) return mod;
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.getCreatorModId(stack);
|
return super.getCreatorModId(stack);
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.turtle.upgrades;
|
package dan200.computercraft.shared.turtle.upgrades;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.ComputerCraftTags;
|
import dan200.computercraft.api.ComputerCraftTags;
|
||||||
import dan200.computercraft.api.turtle.*;
|
import dan200.computercraft.api.turtle.*;
|
||||||
import dan200.computercraft.shared.TurtlePermissions;
|
import dan200.computercraft.shared.TurtlePermissions;
|
||||||
|
import dan200.computercraft.shared.config.Config;
|
||||||
import dan200.computercraft.shared.turtle.TurtleUtil;
|
import dan200.computercraft.shared.turtle.TurtleUtil;
|
||||||
import dan200.computercraft.shared.turtle.core.TurtlePlaceCommand;
|
import dan200.computercraft.shared.turtle.core.TurtlePlaceCommand;
|
||||||
import dan200.computercraft.shared.turtle.core.TurtlePlayer;
|
import dan200.computercraft.shared.turtle.core.TurtlePlayer;
|
||||||
@ -169,7 +169,7 @@ public class TurtleTool extends AbstractTurtleUpgrade {
|
|||||||
var turtlePlayer = TurtlePlayer.getWithPosition(turtle, turtlePosition, direction);
|
var turtlePlayer = TurtlePlayer.getWithPosition(turtle, turtlePosition, direction);
|
||||||
turtlePlayer.loadInventory(item.copy());
|
turtlePlayer.loadInventory(item.copy());
|
||||||
|
|
||||||
if (ComputerCraft.turtlesObeyBlockProtection) {
|
if (Config.turtlesObeyBlockProtection) {
|
||||||
// Check spawn protection
|
// Check spawn protection
|
||||||
if (MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, blockPosition, state, turtlePlayer))) {
|
if (MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, blockPosition, state, turtlePlayer))) {
|
||||||
return TurtleCommandResult.failure("Cannot break protected block");
|
return TurtleCommandResult.failure("Cannot break protected block");
|
||||||
|
@ -5,14 +5,14 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.util;
|
package dan200.computercraft.shared.util;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.shared.ModRegistry;
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
public class CreativeTabMain extends CreativeModeTab {
|
public class CreativeTabMain extends CreativeModeTab {
|
||||||
public CreativeTabMain() {
|
public CreativeTabMain() {
|
||||||
super(ComputerCraft.MOD_ID);
|
super(ComputerCraftAPI.MOD_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,7 +8,8 @@ package dan200.computercraft.shared.util;
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -22,6 +23,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public final class IDAssigner {
|
public final class IDAssigner {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(IDAssigner.class);
|
||||||
public static final String COMPUTER = "computer";
|
public static final String COMPUTER = "computer";
|
||||||
|
|
||||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
||||||
@ -46,7 +48,7 @@ public final class IDAssigner {
|
|||||||
try (Writer writer = Files.newBufferedWriter(idFile, StandardCharsets.UTF_8)) {
|
try (Writer writer = Files.newBufferedWriter(idFile, StandardCharsets.UTF_8)) {
|
||||||
GSON.toJson(ids, writer);
|
GSON.toJson(ids, writer);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
ComputerCraft.log.error("Cannot update ID file '{}'", idFile, e);
|
LOG.error("Cannot update ID file '{}'", idFile, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return next;
|
return next;
|
||||||
@ -57,13 +59,13 @@ public final class IDAssigner {
|
|||||||
try (Reader reader = Files.newBufferedReader(idFile, StandardCharsets.UTF_8)) {
|
try (Reader reader = Files.newBufferedReader(idFile, StandardCharsets.UTF_8)) {
|
||||||
return GSON.fromJson(reader, ID_TOKEN);
|
return GSON.fromJson(reader, ID_TOKEN);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
ComputerCraft.log.error("Cannot load id file '" + idFile + "'", e);
|
LOG.error("Cannot load id file '" + idFile + "'", e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
Files.createDirectories(idFile.getParent());
|
Files.createDirectories(idFile.getParent());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
ComputerCraft.log.error("Cannot create owning directory, IDs will not be persisted", e);
|
LOG.error("Cannot create owning directory, IDs will not be persisted", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,9 +6,10 @@
|
|||||||
package dan200.computercraft.shared.util;
|
package dan200.computercraft.shared.util;
|
||||||
|
|
||||||
import com.google.common.io.BaseEncoding;
|
import com.google.common.io.BaseEncoding;
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.core.util.Nullability;
|
import dan200.computercraft.core.util.Nullability;
|
||||||
import net.minecraft.nbt.*;
|
import net.minecraft.nbt.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.DataOutput;
|
import java.io.DataOutput;
|
||||||
@ -22,6 +23,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public final class NBTUtil {
|
public final class NBTUtil {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(NBTUtil.class);
|
||||||
private static final BaseEncoding ENCODING = BaseEncoding.base16().lowerCase();
|
private static final BaseEncoding ENCODING = BaseEncoding.base16().lowerCase();
|
||||||
|
|
||||||
private NBTUtil() {
|
private NBTUtil() {
|
||||||
@ -159,7 +161,7 @@ public final class NBTUtil {
|
|||||||
var hash = digest.digest();
|
var hash = digest.digest();
|
||||||
return ENCODING.encode(hash);
|
return ENCODING.encode(hash);
|
||||||
} catch (NoSuchAlgorithmException | IOException e) {
|
} catch (NoSuchAlgorithmException | IOException e) {
|
||||||
ComputerCraft.log.error("Cannot hash NBT", e);
|
LOG.error("Cannot hash NBT", e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.shared.wired;
|
package dan200.computercraft.shared.wired;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifies certain elements of a network are "well formed".
|
* Verifies certain elements of a network are "well formed".
|
||||||
@ -14,6 +15,7 @@ import dan200.computercraft.ComputerCraft;
|
|||||||
* in a development environment.
|
* in a development environment.
|
||||||
*/
|
*/
|
||||||
public final class InvariantChecker {
|
public final class InvariantChecker {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(InvariantChecker.class);
|
||||||
private static final boolean ENABLED = false;
|
private static final boolean ENABLED = false;
|
||||||
|
|
||||||
private InvariantChecker() {
|
private InvariantChecker() {
|
||||||
@ -24,17 +26,17 @@ public final class InvariantChecker {
|
|||||||
|
|
||||||
var network = node.network;
|
var network = node.network;
|
||||||
if (network == null) {
|
if (network == null) {
|
||||||
ComputerCraft.log.error("Node's network is null", new Exception());
|
LOG.error("Node's network is null", new Exception());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (network.nodes == null || !network.nodes.contains(node)) {
|
if (network.nodes == null || !network.nodes.contains(node)) {
|
||||||
ComputerCraft.log.error("Node's network does not contain node", new Exception());
|
LOG.error("Node's network does not contain node", new Exception());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var neighbour : node.neighbours) {
|
for (var neighbour : node.neighbours) {
|
||||||
if (!neighbour.neighbours.contains(node)) {
|
if (!neighbour.neighbours.contains(node)) {
|
||||||
ComputerCraft.log.error("Neighbour is missing node", new Exception());
|
LOG.error("Neighbour is missing node", new Exception());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,8 @@ import com.mojang.brigadier.CommandDispatcher;
|
|||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
|
import dan200.computercraft.gametest.core.TestHooks;
|
||||||
import dan200.computercraft.shared.platform.Registries;
|
import dan200.computercraft.shared.platform.Registries;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
@ -73,17 +74,17 @@ public class Exporter {
|
|||||||
|
|
||||||
// First find all CC items
|
// First find all CC items
|
||||||
for (var item : Registries.ITEMS) {
|
for (var item : Registries.ITEMS) {
|
||||||
if (Registries.ITEMS.getKey(item).getNamespace().equals(ComputerCraft.MOD_ID)) items.add(item);
|
if (Registries.ITEMS.getKey(item).getNamespace().equals(ComputerCraftAPI.MOD_ID)) items.add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now find all CC recipes.
|
// Now find all CC recipes.
|
||||||
for (var recipe : Minecraft.getInstance().level.getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) {
|
for (var recipe : Minecraft.getInstance().level.getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) {
|
||||||
var result = recipe.getResultItem();
|
var result = recipe.getResultItem();
|
||||||
if (!Registries.ITEMS.getKey(result.getItem()).getNamespace().equals(ComputerCraft.MOD_ID)) {
|
if (!Registries.ITEMS.getKey(result.getItem()).getNamespace().equals(ComputerCraftAPI.MOD_ID)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (result.hasTag()) {
|
if (result.hasTag()) {
|
||||||
ComputerCraft.log.warn("Skipping recipe {} as it has NBT", recipe.getId());
|
TestHooks.LOG.warn("Skipping recipe {} as it has NBT", recipe.getId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ public class Exporter {
|
|||||||
|
|
||||||
dump.recipes.put(recipe.getId().toString(), converted);
|
dump.recipes.put(recipe.getId().toString(), converted);
|
||||||
} else {
|
} else {
|
||||||
ComputerCraft.log.info("Don't know how to handle recipe {}", recipe);
|
TestHooks.LOG.info("Don't know how to handle recipe {}", recipe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
package dan200.computercraft.gametest.core;
|
package dan200.computercraft.gametest.core;
|
||||||
|
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
import dan200.computercraft.ComputerCraft;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
import dan200.computercraft.mixin.gametest.TestCommandAccessor;
|
import dan200.computercraft.mixin.gametest.TestCommandAccessor;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.commands.CommandSourceStack;
|
import net.minecraft.commands.CommandSourceStack;
|
||||||
@ -32,7 +32,7 @@ import static net.minecraft.commands.Commands.literal;
|
|||||||
* Helper commands for importing/exporting the computer directory.
|
* Helper commands for importing/exporting the computer directory.
|
||||||
*/
|
*/
|
||||||
class CCTestCommand {
|
class CCTestCommand {
|
||||||
public static final LevelResource LOCATION = new LevelResource(ComputerCraft.MOD_ID);
|
public static final LevelResource LOCATION = new LevelResource(ComputerCraftAPI.MOD_ID);
|
||||||
|
|
||||||
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
|
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
|
||||||
dispatcher.register(choice("cctest")
|
dispatcher.register(choice("cctest")
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package dan200.computercraft.gametest.core;
|
package dan200.computercraft.gametest.core;
|
||||||
|
|
||||||
import dan200.computercraft.ComputerCraft;
|
|
||||||
import dan200.computercraft.api.lua.IComputerSystem;
|
import dan200.computercraft.api.lua.IComputerSystem;
|
||||||
import dan200.computercraft.api.lua.ILuaAPI;
|
import dan200.computercraft.api.lua.ILuaAPI;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
@ -37,10 +36,10 @@ public class TestAPI extends ComputerState implements ILuaAPI {
|
|||||||
if (label == null) label = system.getLabel();
|
if (label == null) label = system.getLabel();
|
||||||
if (label == null) {
|
if (label == null) {
|
||||||
label = "#" + system.getID();
|
label = "#" + system.getID();
|
||||||
ComputerCraft.log.warn("Computer {} has no label", label);
|
TestHooks.LOG.warn("Computer {} has no label", label);
|
||||||
}
|
}
|
||||||
|
|
||||||
ComputerCraft.log.info("Computer '{}' has turned on.", label);
|
TestHooks.LOG.info("Computer '{}' has turned on.", label);
|
||||||
markers.clear();
|
markers.clear();
|
||||||
error = null;
|
error = null;
|
||||||
lookup.put(label, this);
|
lookup.put(label, this);
|
||||||
@ -48,7 +47,7 @@ public class TestAPI extends ComputerState implements ILuaAPI {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
ComputerCraft.log.info("Computer '{}' has shut down.", label);
|
TestHooks.LOG.info("Computer '{}' has shut down.", label);
|
||||||
if (lookup.get(label) == this) lookup.remove(label);
|
if (lookup.get(label) == this) lookup.remove(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +58,7 @@ public class TestAPI extends ComputerState implements ILuaAPI {
|
|||||||
|
|
||||||
@LuaFunction
|
@LuaFunction
|
||||||
public final void fail(String message) throws LuaException {
|
public final void fail(String message) throws LuaException {
|
||||||
ComputerCraft.log.error("Computer '{}' failed with {}", label, message);
|
TestHooks.LOG.error("Computer '{}' failed with {}", label, message);
|
||||||
if (markers.contains(ComputerState.DONE)) throw new LuaException("Cannot call fail/ok multiple times.");
|
if (markers.contains(ComputerState.DONE)) throw new LuaException("Cannot call fail/ok multiple times.");
|
||||||
markers.add(ComputerState.DONE);
|
markers.add(ComputerState.DONE);
|
||||||
error = message;
|
error = message;
|
||||||
@ -78,6 +77,6 @@ public class TestAPI extends ComputerState implements ILuaAPI {
|
|||||||
|
|
||||||
@LuaFunction
|
@LuaFunction
|
||||||
public final void log(String message) {
|
public final void log(String message) {
|
||||||
ComputerCraft.log.info("[Computer '{}'] {}", label, message);
|
TestHooks.LOG.info("[Computer '{}'] {}", label, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import java.nio.file.Path;
|
|||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
public class TestHooks {
|
public class TestHooks {
|
||||||
public static final Logger LOGGER = LoggerFactory.getLogger(TestHooks.class);
|
public static final Logger LOG = LoggerFactory.getLogger(TestHooks.class);
|
||||||
|
|
||||||
public static final Path sourceDir = Paths.get(System.getProperty("cctest.sources")).normalize().toAbsolutePath();
|
public static final Path sourceDir = Paths.get(System.getProperty("cctest.sources")).normalize().toAbsolutePath();
|
||||||
|
|
||||||
@ -39,17 +39,17 @@ public class TestHooks {
|
|||||||
var world = server.getLevel(Level.OVERWORLD);
|
var world = server.getLevel(Level.OVERWORLD);
|
||||||
if (world != null) world.setDayTime(Times.NOON);
|
if (world != null) world.setDayTime(Times.NOON);
|
||||||
|
|
||||||
LOGGER.info("Cleaning up after last run");
|
LOG.info("Cleaning up after last run");
|
||||||
GameTestRunner.clearAllTests(server.overworld(), new BlockPos(0, -60, 0), GameTestTicker.SINGLETON, 200);
|
GameTestRunner.clearAllTests(server.overworld(), new BlockPos(0, -60, 0), GameTestTicker.SINGLETON, 200);
|
||||||
|
|
||||||
// Delete server context and add one with a mutable machine factory. This allows us to set the factory for
|
// Delete server context and add one with a mutable machine factory. This allows us to set the factory for
|
||||||
// specific test batches without having to reset all computers.
|
// specific test batches without having to reset all computers.
|
||||||
for (var computer : ServerContext.get(server).registry().getComputers()) {
|
for (var computer : ServerContext.get(server).registry().getComputers()) {
|
||||||
var label = computer.getLabel() == null ? "#" + computer.getID() : computer.getLabel();
|
var label = computer.getLabel() == null ? "#" + computer.getID() : computer.getLabel();
|
||||||
LOGGER.warn("Unexpected computer {}", label);
|
LOG.warn("Unexpected computer {}", label);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOGGER.info("Importing files");
|
LOG.info("Importing files");
|
||||||
CCTestCommand.importFiles(server);
|
CCTestCommand.importFiles(server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ class GameTestSequenceMixin {
|
|||||||
parent.fail(e);
|
parent.fail(e);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// Fail the test, rather than crashing the server.
|
// Fail the test, rather than crashing the server.
|
||||||
TestHooks.LOGGER.error("{} threw unexpected exception", parent.getTestName(), e);
|
TestHooks.LOG.error("{} threw unexpected exception", parent.getTestName(), e);
|
||||||
parent.fail(e);
|
parent.fail(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user