Add manual.
This commit is contained in:
@@ -60,6 +60,9 @@ dependencies {
|
||||
implementation 'li.cil.sedna:sedna:0.0.1+99'
|
||||
implementation 'li.cil.sedna:sedna-buildroot:0.0.1+15'
|
||||
|
||||
compileOnly fg.deobf("li.cil.markdown_manual:MarkdownManual:MC${minecraft_version}-Forge-${manual_version}:api")
|
||||
runtimeOnly fg.deobf("li.cil.markdown_manual:MarkdownManual:MC${minecraft_version}-Forge-${manual_version}")
|
||||
|
||||
compileOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}:api")
|
||||
runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}")
|
||||
|
||||
@@ -89,7 +92,8 @@ processResources {
|
||||
'mod_issues_url' : mod_issues_url,
|
||||
'forge_version_min' : forge_version_min,
|
||||
'minecraft_version_min': minecraft_version_min,
|
||||
'oc2_sedna_version_min': oc2_sedna_version_min
|
||||
'oc2_sedna_version_min': oc2_sedna_version_min,
|
||||
'manual_version_min' : manual_version,
|
||||
])
|
||||
}
|
||||
}
|
||||
@@ -142,11 +146,9 @@ minecraft {
|
||||
}
|
||||
|
||||
task copyGeneratedResources(type: Copy) {
|
||||
dependsOn { runData }
|
||||
from "src/generated"
|
||||
into "src/main"
|
||||
exclude "resources/.cache"
|
||||
exclude "resources/assets/oc2/models/block"
|
||||
}
|
||||
|
||||
jar {
|
||||
@@ -179,6 +181,7 @@ artifacts {
|
||||
publishing {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
version "MC${minecraft_version}-Forge-${version}"
|
||||
artifact jar
|
||||
artifact apiJar
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ version_minor=0
|
||||
version_patch=1
|
||||
|
||||
oc2_sedna_version_min=0.0.1
|
||||
manual_version=1.0.1+
|
||||
|
||||
jei_minecraft_version=1.16.4
|
||||
jei_version=7.6.1.71
|
||||
|
||||
55
src/main/java/li/cil/oc2/client/manual/Manuals.java
Normal file
55
src/main/java/li/cil/oc2/client/manual/Manuals.java
Normal file
@@ -0,0 +1,55 @@
|
||||
package li.cil.oc2.client.manual;
|
||||
|
||||
import li.cil.manual.api.ManualModel;
|
||||
import li.cil.manual.api.Tab;
|
||||
import li.cil.manual.api.prefab.Manual;
|
||||
import li.cil.manual.api.prefab.provider.NamespaceContentProvider;
|
||||
import li.cil.manual.api.prefab.provider.NamespacePathProvider;
|
||||
import li.cil.manual.api.prefab.tab.ItemStackTab;
|
||||
import li.cil.manual.api.prefab.tab.TextureTab;
|
||||
import li.cil.manual.api.provider.ContentProvider;
|
||||
import li.cil.manual.api.provider.PathProvider;
|
||||
import li.cil.oc2.api.API;
|
||||
import li.cil.oc2.common.block.Blocks;
|
||||
import li.cil.oc2.common.item.Items;
|
||||
import li.cil.oc2.common.util.RegistryUtils;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.text.TranslationTextComponent;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.fml.RegistryObject;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public final class Manuals {
|
||||
private static final DeferredRegister<ManualModel> MANUALS = RegistryUtils.create(ManualModel.class);
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public static final RegistryObject<ManualModel> MANUAL = MANUALS.register("manual", Manual::new);
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public static void initialize() {
|
||||
final DeferredRegister<PathProvider> pathProviders = RegistryUtils.create(PathProvider.class);
|
||||
final DeferredRegister<ContentProvider> contentProviders = RegistryUtils.create(ContentProvider.class);
|
||||
final DeferredRegister<Tab> tabs = RegistryUtils.create(Tab.class);
|
||||
|
||||
pathProviders.register("path_provider", () -> new NamespacePathProvider(API.MOD_ID));
|
||||
contentProviders.register("content_provider", () -> new NamespaceContentProvider(API.MOD_ID, "doc"));
|
||||
|
||||
tabs.register("home", () -> new TextureTab(
|
||||
ManualModel.LANGUAGE_KEY + "/index.md",
|
||||
new TranslationTextComponent("manual." + API.MOD_ID + ".home"),
|
||||
new ResourceLocation(API.MOD_ID, "textures/gui/manual/home.png")));
|
||||
tabs.register("blocks", () -> new ItemStackTab(
|
||||
ManualModel.LANGUAGE_KEY + "/block/index.md",
|
||||
new TranslationTextComponent("manual." + API.MOD_ID + ".blocks"),
|
||||
new ItemStack(Blocks.COMPUTER.get())));
|
||||
tabs.register("modules", () -> new ItemStackTab(
|
||||
ManualModel.LANGUAGE_KEY + "/item/index.md",
|
||||
new TranslationTextComponent("manual." + API.MOD_ID + ".items"),
|
||||
new ItemStack(Items.TRANSISTOR.get())));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package li.cil.oc2.client.manual;
|
||||
|
||||
import li.cil.manual.api.ManualScreenStyle;
|
||||
import li.cil.oc2.api.API;
|
||||
import net.minecraft.client.renderer.Rectangle2d;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public final class ModManualScreenStyle implements ManualScreenStyle {
|
||||
public static final ManualScreenStyle INSTANCE = new ModManualScreenStyle();
|
||||
|
||||
@Override
|
||||
public ResourceLocation getWindowBackground() {
|
||||
return new ResourceLocation(API.MOD_ID, "textures/gui/manual/manual.png");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getScrollButtonTexture() {
|
||||
return new ResourceLocation(API.MOD_ID, "textures/gui/manual/scroll_button.png");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTabButtonTexture() {
|
||||
return new ResourceLocation(API.MOD_ID, "textures/gui/manual/tab_button.png");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2d getDocumentRect() {
|
||||
return new Rectangle2d(12, 12, 216, 232);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2d getScrollBarRect() {
|
||||
return new Rectangle2d(236, 8, 12, 240);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2d getScrollButtonRect() {
|
||||
return new Rectangle2d(0, 0, 12, 12);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2d getTabAreaRect() {
|
||||
return new Rectangle2d(-52, 12, 52, 232);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle2d getTabRect() {
|
||||
return new Rectangle2d(0, 0, 64, 24);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTabOverlap() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
54
src/main/java/li/cil/oc2/client/manual/ModManualStyle.java
Normal file
54
src/main/java/li/cil/oc2/client/manual/ModManualStyle.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package li.cil.oc2.client.manual;
|
||||
|
||||
import li.cil.manual.api.ManualStyle;
|
||||
import li.cil.manual.api.render.FontRenderer;
|
||||
import li.cil.oc2.client.renderer.font.TerminalFontRenderer;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.SoundEvents;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public final class ModManualStyle implements ManualStyle {
|
||||
public static final ManualStyle INSTANCE = new ModManualStyle();
|
||||
|
||||
@Override
|
||||
public int getRegularTextColor() {
|
||||
return 0xFFDDDDDD;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMonospaceTextColor() {
|
||||
return 0xFF37FF99;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegularLinkColor() {
|
||||
return 0xFF9CC6E7;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHoveredLinkColor() {
|
||||
return 0xFFBADCF7;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRegularDeadLinkColor() {
|
||||
return 0xFFFF3755;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHoveredDeadLinkColor() {
|
||||
return 0xFFFF8497;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FontRenderer getMonospaceFont() {
|
||||
return TerminalFontRenderer.INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getPageChangeSound() {
|
||||
return SoundEvents.UI_BUTTON_CLICK;
|
||||
}
|
||||
}
|
||||
7
src/main/java/li/cil/oc2/client/manual/package-info.java
Normal file
7
src/main/java/li/cil/oc2/client/manual/package-info.java
Normal file
@@ -0,0 +1,7 @@
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
package li.cil.oc2.client.manual;
|
||||
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
@@ -0,0 +1,49 @@
|
||||
package li.cil.oc2.client.renderer.font;
|
||||
|
||||
import li.cil.manual.api.prefab.renderer.BitmapFontRenderer;
|
||||
import li.cil.manual.api.render.FontRenderer;
|
||||
import li.cil.oc2.api.API;
|
||||
import li.cil.oc2.common.vm.Terminal;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public final class TerminalFontRenderer extends BitmapFontRenderer {
|
||||
public static final FontRenderer INSTANCE = new TerminalFontRenderer();
|
||||
|
||||
private static final ResourceLocation LOCATION_FONT_TEXTURE = new ResourceLocation(API.MOD_ID, "textures/font/terminus_simple.png");
|
||||
private static final String CHARS = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
|
||||
|
||||
@Override
|
||||
protected CharSequence getCharacters() {
|
||||
return CHARS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getTextureLocation() {
|
||||
return LOCATION_FONT_TEXTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getResolution() {
|
||||
return 128;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getGapU() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getGapV() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int charWidth() {
|
||||
return Terminal.CHAR_WIDTH;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int lineHeight() {
|
||||
return Terminal.CHAR_HEIGHT;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
package li.cil.oc2.client.renderer.font;
|
||||
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
@@ -3,6 +3,7 @@ package li.cil.oc2.common;
|
||||
import li.cil.ceres.Ceres;
|
||||
import li.cil.oc2.api.API;
|
||||
import li.cil.oc2.client.ClientSetup;
|
||||
import li.cil.oc2.client.manual.Manuals;
|
||||
import li.cil.oc2.common.block.Blocks;
|
||||
import li.cil.oc2.common.bus.device.DeviceTypes;
|
||||
import li.cil.oc2.common.bus.device.data.BlockDeviceDataRegistration;
|
||||
@@ -16,6 +17,7 @@ import li.cil.oc2.common.serialization.serializers.Serializers;
|
||||
import li.cil.oc2.common.tags.BlockTags;
|
||||
import li.cil.oc2.common.tags.ItemTags;
|
||||
import li.cil.oc2.common.tileentity.TileEntities;
|
||||
import li.cil.oc2.common.util.RegistryUtils;
|
||||
import li.cil.oc2.common.util.SoundEvents;
|
||||
import li.cil.sedna.Sedna;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
@@ -50,6 +52,8 @@ public final class Main {
|
||||
BlockDeviceDataRegistration.initialize();
|
||||
Firmwares.initialize();
|
||||
|
||||
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> Manuals::initialize);
|
||||
|
||||
RegistryUtils.finish();
|
||||
|
||||
FMLJavaModLoadingContext.get().getModEventBus().register(CommonSetup.class);
|
||||
|
||||
@@ -33,6 +33,7 @@ public final class Items {
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
public static final RegistryObject<Item> WRENCH = register("wrench", WrenchItem::new);
|
||||
public static final RegistryObject<Item> MANUAL = register("manual", ManualItem::new);
|
||||
|
||||
public static final RegistryObject<NetworkCableItem> NETWORK_CABLE = register("network_cable", NetworkCableItem::new);
|
||||
public static final RegistryObject<Item> ROBOT = register("robot", RobotItem::new);
|
||||
|
||||
53
src/main/java/li/cil/oc2/common/item/ManualItem.java
Normal file
53
src/main/java/li/cil/oc2/common/item/ManualItem.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package li.cil.oc2.common.item;
|
||||
|
||||
import li.cil.manual.api.ManualModel;
|
||||
import li.cil.manual.api.ManualScreenStyle;
|
||||
import li.cil.manual.api.ManualStyle;
|
||||
import li.cil.manual.api.prefab.item.AbstractManualItem;
|
||||
import li.cil.oc2.client.manual.Manuals;
|
||||
import li.cil.oc2.client.manual.ModManualScreenStyle;
|
||||
import li.cil.oc2.client.manual.ModManualStyle;
|
||||
import li.cil.oc2.common.util.TooltipUtils;
|
||||
import net.minecraft.client.util.ITooltipFlag;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
public final class ManualItem extends AbstractManualItem {
|
||||
public ManualItem() {
|
||||
super(new Properties().tab(ItemGroup.COMMON));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Override
|
||||
public void appendHoverText(final ItemStack stack, @Nullable final World world, final List<ITextComponent> tooltip, final ITooltipFlag flag) {
|
||||
super.appendHoverText(stack, world, tooltip, flag);
|
||||
TooltipUtils.tryAddDescription(stack, tooltip);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
protected ManualModel getManualModel() {
|
||||
return Manuals.MANUAL.get();
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Override
|
||||
protected ManualStyle getManualStyle() {
|
||||
return ModManualStyle.INSTANCE;
|
||||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
@Override
|
||||
protected ManualScreenStyle getScreenStyle() {
|
||||
return ModManualScreenStyle.INSTANCE;
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ public final class ModItemModelProvider extends ItemModelProvider {
|
||||
@Override
|
||||
protected void registerModels() {
|
||||
simple(Items.WRENCH);
|
||||
simple(Items.MANUAL);
|
||||
|
||||
simple(Items.NETWORK_CABLE);
|
||||
|
||||
|
||||
@@ -31,4 +31,9 @@ modId = "oc2-sedna"
|
||||
mandatory = true
|
||||
versionRange = "[${oc2_sedna_version_min},)"
|
||||
ordering = "NONE"
|
||||
side = "BOTH"
|
||||
side = "BOTH"
|
||||
[[dependencies.oc2]]
|
||||
modId = "markdown_manual"
|
||||
mandatory = true
|
||||
versionRange = "[${manual_version_min},)"
|
||||
side = "CLIENT"
|
||||
15
src/main/resources/assets/oc2/doc/en_us/index.md
Normal file
15
src/main/resources/assets/oc2/doc/en_us/index.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Manual
|
||||
Content pending...
|
||||
|
||||
- this is a list. lorem ipsum dolor sit amet and so on and so forth, just want to get a line break.
|
||||
- end of list
|
||||
|
||||

|
||||
|
||||
Some `inline code` test.
|
||||
|
||||
`local d = require('devices')`
|
||||
`local r = d:find("redstone")`
|
||||
`r:setRedstoneOutput("left", 15)`
|
||||
|
||||
And finally, a [dead link](dead.md) and a [working one](index.md).
|
||||
@@ -17,6 +17,8 @@
|
||||
|
||||
"item.oc2.wrench": "Scrench",
|
||||
"item.oc2.wrench.desc": "Used to configure devices and to dismantle them (while sneaking).",
|
||||
"item.oc2.manual": "Manual",
|
||||
"item.oc2.manual.desc": "Obtain by using a book on a computer casing in the world.",
|
||||
"item.oc2.bus_interface": "Bus Interface",
|
||||
"item.oc2.bus_interface.desc": "Used to attach Bus Cables to external devices.",
|
||||
"item.oc2.network_cable": "Network Cable",
|
||||
@@ -66,6 +68,10 @@
|
||||
"gui.oc2.file_chooser.confirm_button.overwrite": "Overwrite",
|
||||
"gui.oc2.file_chooser.cancel_button": "Cancel",
|
||||
|
||||
"manual.oc2.home": "Home",
|
||||
"manual.oc2.blocks": "Blocks",
|
||||
"manual.oc2.items": "Items",
|
||||
|
||||
"message.oc2.connector.error.full": "Cannot attach more cables.",
|
||||
"message.oc2.connector.error.too_far": "Distance between connectors is too large.",
|
||||
"message.oc2.connector.error.obstructed": "No clear line of sight between connectors.",
|
||||
|
||||
6
src/main/resources/assets/oc2/models/item/manual.json
Normal file
6
src/main/resources/assets/oc2/models/item/manual.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "oc2:item/manual"
|
||||
}
|
||||
}
|
||||
BIN
src/main/resources/assets/oc2/textures/font/terminus_simple.png
Normal file
BIN
src/main/resources/assets/oc2/textures/font/terminus_simple.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 KiB |
BIN
src/main/resources/assets/oc2/textures/gui/manual/home.png
Normal file
BIN
src/main/resources/assets/oc2/textures/gui/manual/home.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
BIN
src/main/resources/assets/oc2/textures/gui/manual/manual.png
Normal file
BIN
src/main/resources/assets/oc2/textures/gui/manual/manual.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
BIN
src/main/resources/assets/oc2/textures/gui/manual/tab_button.png
Normal file
BIN
src/main/resources/assets/oc2/textures/gui/manual/tab_button.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
BIN
src/main/resources/assets/oc2/textures/item/manual.png
Normal file
BIN
src/main/resources/assets/oc2/textures/item/manual.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 432 B |
Reference in New Issue
Block a user