Add manual.

This commit is contained in:
Florian Nücke
2021-07-11 20:46:31 +02:00
parent 54c3b16d29
commit bd25a87db3
22 changed files with 329 additions and 4 deletions

View File

@@ -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
}

View File

@@ -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

View 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())));
}
}

View File

@@ -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;
}
}

View 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;
}
}

View File

@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package li.cil.oc2.client.manual;
import mcp.MethodsReturnNonnullByDefault;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@@ -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;
}
}

View File

@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package li.cil.oc2.client.renderer.font;
import mcp.MethodsReturnNonnullByDefault;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@@ -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);

View File

@@ -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);

View 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;
}
}

View File

@@ -19,6 +19,7 @@ public final class ModItemModelProvider extends ItemModelProvider {
@Override
protected void registerModels() {
simple(Items.WRENCH);
simple(Items.MANUAL);
simple(Items.NETWORK_CABLE);

View File

@@ -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"

View 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
![block test](block:oc2:computer)
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).

View File

@@ -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.",

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "oc2:item/manual"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B