Compare commits

...
6 Commits
Author SHA1 Message Date
Raven Szewczyk 113e05b7e6 Java11 javadoc generator (#18) 2023-02-28 01:30:57 +08:00
Glease 080785ad05 spotless 2023-02-27 20:36:44 +08:00
Glease 6c14ca0a1d fix hologram rendering at large coordinates
Inspired by https://github.com/GTNewHorizons/NotEnoughItems/pull/353. Thanks @eigenraven!
2023-02-27 19:57:51 +08:00
Glease ea38c4e1d6 add API to get hologram item 2023-02-11 01:26:46 +08:00
Glease 50e8c97aa3 fix javadoc 2023-02-11 01:26:46 +08:00
Raven Szewczyk 9a82239f2c [ci skip] upgraded build system 2023-01-31 09:56:09 +00:00
8 changed files with 72 additions and 99 deletions

No files matched your search

-47
View File
@@ -1,47 +0,0 @@
# Simple workflow for deploying static content to GitHub Pages
name: Deploy static content to Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["gh-pages"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
# Single deploy job since we're just deploying
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Pages
uses: actions/configure-pages@v2
- name: Generate Index
shell: bash
run: |
find . -name javadoc -type d -print > index.txt
echo feature/doc >> index.txt
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
# Upload entire repository
path: '.'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
+7 -4
View File
@@ -20,13 +20,16 @@ jobs:
outputs: outputs:
result_hash: ${{ steps.deploy.outputs.hash }} result_hash: ${{ steps.deploy.outputs.hash }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
with: with:
fetch-depth: 0 fetch-depth: 0
- uses: actions/setup-java@v2 - uses: actions/setup-java@v3
with: with:
java-version: 8 java-version: |
8
11
17
distribution: 'temurin' distribution: 'temurin'
cache: gradle cache: gradle
@@ -51,7 +54,7 @@ jobs:
echo Nothing to deploy echo Nothing to deploy
exit 0 exit 0
fi fi
find . -name javadoc -type d -print | sed 's#^\./\(.*\)/javadoc$#\1#' > index.txt find . -name javadoc -type d -print | sed 's#^\./\(.*\)/javadoc$#\1#' | sort --version-sort --reverse > index.txt
git add index.txt git add index.txt
git config user.name "${GITHUB_ACTOR}" git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
+7
View File
@@ -1,4 +1,10 @@
javadoc { javadoc {
javadocTool = javaToolchains.javadocToolFor {
// Last version with frames, but it also has search
languageVersion = JavaLanguageVersion.of(11)
vendor = JvmVendorSpec.ADOPTIUM
}
inputs.file "src/main/javadoc/overview.html" inputs.file "src/main/javadoc/overview.html"
include "com/gtnewhorizon/structurelib/alignment/**" include "com/gtnewhorizon/structurelib/alignment/**"
@@ -14,6 +20,7 @@ javadoc {
overview "src/main/javadoc/overview.html" overview "src/main/javadoc/overview.html"
links 'https://docs.oracle.com/javase/8/docs/api/' links 'https://docs.oracle.com/javase/8/docs/api/'
links 'https://skmedix.github.io/ForgeJavaDocs/javadoc/forge/1.7.10-10.13.4.1614/' links 'https://skmedix.github.io/ForgeJavaDocs/javadoc/forge/1.7.10-10.13.4.1614/'
addBooleanOption("-frames", true)
} }
} }
+7 -14
View File
@@ -1,4 +1,4 @@
//version: 1675074449 //version: 1675110695
/* /*
DO NOT CHANGE THIS FILE! DO NOT CHANGE THIS FILE!
Also, you may replace this file at any time if there is an update available. Also, you may replace this file at any time if there is an update available.
@@ -66,7 +66,7 @@ plugins {
id 'com.diffplug.spotless' version '6.7.2' apply false id 'com.diffplug.spotless' version '6.7.2' apply false
id 'com.modrinth.minotaur' version '2.+' apply false id 'com.modrinth.minotaur' version '2.+' apply false
id 'com.matthewprenger.cursegradle' version '1.4.0' apply false id 'com.matthewprenger.cursegradle' version '1.4.0' apply false
id 'com.gtnewhorizons.retrofuturagradle' version '1.0.18' id 'com.gtnewhorizons.retrofuturagradle' version '1.1.2'
} }
boolean settingsupdated = verifySettingsGradle() boolean settingsupdated = verifySettingsGradle()
settingsupdated = verifyGitAttributes() || settingsupdated settingsupdated = verifyGitAttributes() || settingsupdated
@@ -166,6 +166,9 @@ pluginManager.withPlugin('org.jetbrains.kotlin.jvm') {
"kaptMcLauncherKotlin", "kaptMcLauncherKotlin",
"kaptPatchedMcKotlin", "kaptPatchedMcKotlin",
"kaptInjectedTagsKotlin", "kaptInjectedTagsKotlin",
"kspMcLauncherKotlin",
"kspPatchedMcKotlin",
"kspInjectedTagsKotlin",
] ]
tasks.configureEach { task -> tasks.configureEach { task ->
if (task.name in disabledKotlinTaskList) { if (task.name in disabledKotlinTaskList) {
@@ -334,7 +337,7 @@ if (identifiedVersion == versionOverride) {
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7') out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
} }
group = modGroup group = "com.github.GTNewHorizons"
if (project.hasProperty("customArchiveBaseName") && customArchiveBaseName) { if (project.hasProperty("customArchiveBaseName") && customArchiveBaseName) {
archivesBaseName = customArchiveBaseName archivesBaseName = customArchiveBaseName
} else { } else {
@@ -711,16 +714,6 @@ if (usesShadowedDependencies.toBoolean()) {
ext.publishableDevJar = usesShadowedDependencies.toBoolean() ? tasks.shadowJar : tasks.jar ext.publishableDevJar = usesShadowedDependencies.toBoolean() ? tasks.shadowJar : tasks.jar
ext.publishableObfJar = tasks.reobfJar ext.publishableObfJar = tasks.reobfJar
tasks.named('extractForgeUserdev', Copy).configure { efu ->
doLast {
// Fix CoFH-repackaged CCL not finding mappings
project.copy {
from(mcpTasks.userdevDir("conf"))
into(new File(project.buildDir, "unpacked/conf"))
}
}
}
tasks.register('apiJar', Jar) { tasks.register('apiJar', Jar) {
from(sourceSets.main.allSource) { from(sourceSets.main.allSource) {
include modGroupPath + "/" + apiPackagePath + '/**' include modGroupPath + "/" + apiPackagePath + '/**'
@@ -825,7 +818,7 @@ publishing {
artifact apiJar artifact apiJar
} }
groupId = System.getenv("ARTIFACT_GROUP_ID") ?: "com.github.GTNewHorizons" groupId = System.getenv("ARTIFACT_GROUP_ID") ?: project.group
artifactId = System.getenv("ARTIFACT_ID") ?: project.name artifactId = System.getenv("ARTIFACT_ID") ?: project.name
// Using the identified version, not project.version as it has the prepended 1.7.10 // Using the identified version, not project.version as it has the prepended 1.7.10
version = System.getenv("RELEASE_VERSION") ?: identifiedVersion version = System.getenv("RELEASE_VERSION") ?: identifiedVersion
@@ -10,7 +10,6 @@ import net.minecraft.client.gui.GuiNewChat;
import net.minecraft.client.particle.EntityFX; import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.culling.Frustrum; import net.minecraft.client.renderer.culling.Frustrum;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@@ -271,10 +270,6 @@ public class ClientProxy extends CommonProxy {
private final World w; private final World w;
// these are the block coordinate for e.g. w.getBlock() // these are the block coordinate for e.g. w.getBlock()
private final int x, y, z; private final int x, y, z;
// these are the lower bounds for rendering. the upper bound would be X + size
// currently size is fixed to be 0.5
// it is not made into a constants because this will allow for easy changing during debug
private final double X, Y, Z;
private final IIcon[] icons; private final IIcon[] icons;
private short[] tint; private short[] tint;
private boolean renderThrough; private boolean renderThrough;
@@ -286,9 +281,6 @@ public class ClientProxy extends CommonProxy {
this.x = x; this.x = x;
this.y = y; this.y = y;
this.z = z; this.z = z;
X = x + 0.25;
Y = y + 0.25;
Z = z + 0.25;
this.icons = icons; this.icons = icons;
this.tint = tint; this.tint = tint;
} }
@@ -324,10 +316,11 @@ public class ClientProxy extends CommonProxy {
} }
public boolean isInFrustrum(Frustrum frustrum) { public boolean isInFrustrum(Frustrum frustrum) {
return frustrum.isBoxInFrustum(X, Y, Z, X + 0.5, Y + 0.5, Z + 0.5); return frustrum.isBoxInFrustum(x + 0.25, y + 0.25, z + 0.25, x + 0.75, y + 0.75, z + 0.75);
} }
public void draw(Tessellator tes, double eyeX, double eyeY, double eyeZ) { public void draw(Tessellator tes, double eyeX, double eyeY, double eyeZ, int eyeXint, int eyeYint,
int eyeZint) {
double size = 0.5; double size = 0.5;
int brightness = w.blockExists(x, 0, z) ? w.getLightBrightnessForSkyBlocks(x, y, z, 0) : 0; int brightness = w.blockExists(x, 0, z) ? w.getLightBrightnessForSkyBlocks(x, y, z, 0) : 0;
@@ -339,6 +332,10 @@ public class ClientProxy extends CommonProxy {
(int) (tint[2] * 1F), (int) (tint[2] * 1F),
ConfigurationHandler.INSTANCE.getHintTransparency()); ConfigurationHandler.INSTANCE.getHintTransparency());
double X = (x - eyeXint) + 0.25;
double Y = (y - eyeYint) + 0.25;
double Z = (z - eyeZint) + 0.25;
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
if (icons[i] == null) continue; if (icons[i] == null) continue;
@@ -362,7 +359,9 @@ public class ClientProxy extends CommonProxy {
tes.addVertexWithUV(X, Y, Z + size, u, V); tes.addVertexWithUV(X, Y, Z + size, u, V);
tes.addVertexWithUV(X, Y, Z, u, v); tes.addVertexWithUV(X, Y, Z, u, v);
tes.addVertexWithUV(X + size, Y, Z, U, v); tes.addVertexWithUV(X + size, Y, Z, U, v);
tes.addVertexWithUV(X + size, Y, Z, U, v);
tes.addVertexWithUV(X + size, Y, Z + size, U, V); tes.addVertexWithUV(X + size, Y, Z + size, U, V);
tes.addVertexWithUV(X, Y, Z + size, u, V);
break; break;
case 1: case 1:
if ((Y + size <= eyeY) != (j == 1)) continue; if ((Y + size <= eyeY) != (j == 1)) continue;
@@ -370,7 +369,9 @@ public class ClientProxy extends CommonProxy {
tes.addVertexWithUV(X, Y + size, Z, u, v); tes.addVertexWithUV(X, Y + size, Z, u, v);
tes.addVertexWithUV(X, Y + size, Z + size, u, V); tes.addVertexWithUV(X, Y + size, Z + size, u, V);
tes.addVertexWithUV(X + size, Y + size, Z + size, U, V); tes.addVertexWithUV(X + size, Y + size, Z + size, U, V);
tes.addVertexWithUV(X + size, Y + size, Z + size, U, V);
tes.addVertexWithUV(X + size, Y + size, Z, U, v); tes.addVertexWithUV(X + size, Y + size, Z, U, v);
tes.addVertexWithUV(X, Y + size, Z, u, v);
break; break;
case 2: case 2:
if ((Z >= eyeZ) != (j == 1)) continue; if ((Z >= eyeZ) != (j == 1)) continue;
@@ -378,7 +379,9 @@ public class ClientProxy extends CommonProxy {
tes.addVertexWithUV(X, Y, Z, U, V); tes.addVertexWithUV(X, Y, Z, U, V);
tes.addVertexWithUV(X, Y + size, Z, U, v); tes.addVertexWithUV(X, Y + size, Z, U, v);
tes.addVertexWithUV(X + size, Y + size, Z, u, v); tes.addVertexWithUV(X + size, Y + size, Z, u, v);
tes.addVertexWithUV(X + size, Y + size, Z, u, v);
tes.addVertexWithUV(X + size, Y, Z, u, V); tes.addVertexWithUV(X + size, Y, Z, u, V);
tes.addVertexWithUV(X, Y, Z, U, V);
break; break;
case 3: case 3:
if ((Z <= eyeZ) != (j == 1)) continue; if ((Z <= eyeZ) != (j == 1)) continue;
@@ -386,7 +389,9 @@ public class ClientProxy extends CommonProxy {
tes.addVertexWithUV(X + size, Y, Z + size, U, V); tes.addVertexWithUV(X + size, Y, Z + size, U, V);
tes.addVertexWithUV(X + size, Y + size, Z + size, U, v); tes.addVertexWithUV(X + size, Y + size, Z + size, U, v);
tes.addVertexWithUV(X, Y + size, Z + size, u, v); tes.addVertexWithUV(X, Y + size, Z + size, u, v);
tes.addVertexWithUV(X, Y + size, Z + size, u, v);
tes.addVertexWithUV(X, Y, Z + size, u, V); tes.addVertexWithUV(X, Y, Z + size, u, V);
tes.addVertexWithUV(X + size, Y, Z + size, U, V);
break; break;
case 4: case 4:
if ((X >= eyeX) != (j == 1)) continue; if ((X >= eyeX) != (j == 1)) continue;
@@ -394,7 +399,9 @@ public class ClientProxy extends CommonProxy {
tes.addVertexWithUV(X, Y, Z + size, U, V); tes.addVertexWithUV(X, Y, Z + size, U, V);
tes.addVertexWithUV(X, Y + size, Z + size, U, v); tes.addVertexWithUV(X, Y + size, Z + size, U, v);
tes.addVertexWithUV(X, Y + size, Z, u, v); tes.addVertexWithUV(X, Y + size, Z, u, v);
tes.addVertexWithUV(X, Y + size, Z, u, v);
tes.addVertexWithUV(X, Y, Z, u, V); tes.addVertexWithUV(X, Y, Z, u, V);
tes.addVertexWithUV(X, Y, Z + size, U, V);
break; break;
case 5: case 5:
if ((X + size <= eyeX) != (j == 1)) continue; if ((X + size <= eyeX) != (j == 1)) continue;
@@ -402,7 +409,9 @@ public class ClientProxy extends CommonProxy {
tes.addVertexWithUV(X + size, Y, Z, U, V); tes.addVertexWithUV(X + size, Y, Z, U, V);
tes.addVertexWithUV(X + size, Y + size, Z, U, v); tes.addVertexWithUV(X + size, Y + size, Z, U, v);
tes.addVertexWithUV(X + size, Y + size, Z + size, u, v); tes.addVertexWithUV(X + size, Y + size, Z + size, u, v);
tes.addVertexWithUV(X + size, Y + size, Z + size, u, v);
tes.addVertexWithUV(X + size, Y, Z + size, u, V); tes.addVertexWithUV(X + size, Y, Z + size, u, V);
tes.addVertexWithUV(X + size, Y, Z, U, V);
break; break;
} }
} }
@@ -414,7 +423,7 @@ public class ClientProxy extends CommonProxy {
} }
public double getSquareDistanceTo(Vec3 point) { public double getSquareDistanceTo(Vec3 point) {
return point.squareDistanceTo(X, Y, Z); return point.squareDistanceTo(x + 0.5, y + 0.5, z + 0.5);
} }
} }
@@ -501,6 +510,7 @@ public class ClientProxy extends CommonProxy {
+ (entitylivingbase.posY - entitylivingbase.lastTickPosY) * e.partialTicks; + (entitylivingbase.posY - entitylivingbase.lastTickPosY) * e.partialTicks;
double d2 = entitylivingbase.lastTickPosZ double d2 = entitylivingbase.lastTickPosZ
+ (entitylivingbase.posZ - entitylivingbase.lastTickPosZ) * e.partialTicks; + (entitylivingbase.posZ - entitylivingbase.lastTickPosZ) * e.partialTicks;
int i0 = (int) d0, i1 = (int) d1, i2 = (int) d2;
frustrum.setPosition(d0, d1, d2); frustrum.setPosition(d0, d1, d2);
GL11.glPushMatrix(); GL11.glPushMatrix();
@@ -513,9 +523,9 @@ public class ClientProxy extends CommonProxy {
// depth test begin as enabled // depth test begin as enabled
boolean renderThrough = false; boolean renderThrough = false;
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
GL11.glTranslated(-RenderManager.renderPosX, -RenderManager.renderPosY, -RenderManager.renderPosZ); GL11.glTranslated(-d0 + i0, -d1 + i1, -d2 + i2);
Tessellator tes = Tessellator.instance; Tessellator tes = Tessellator.instance;
tes.startDrawingQuads(); tes.startDrawing(GL11.GL_TRIANGLES);
for (int i = 0, allHintsForRenderSize = allHintsForRender.size(); i < allHintsForRenderSize; i++) { for (int i = 0, allHintsForRenderSize = allHintsForRender.size(); i < allHintsForRenderSize; i++) {
HintParticleInfo hint = allHintsForRender.get(i); HintParticleInfo hint = allHintsForRender.get(i);
if (!hint.isInFrustrum(frustrum)) continue; if (!hint.isInFrustrum(frustrum)) continue;
@@ -523,7 +533,7 @@ public class ClientProxy extends CommonProxy {
if (i > 0) { if (i > 0) {
p.endStartSection("Draw"); p.endStartSection("Draw");
tes.draw(); tes.draw();
tes.startDrawingQuads(); tes.startDrawing(GL11.GL_TRIANGLES);
p.endStartSection("Prepare"); p.endStartSection("Prepare");
} }
if (hint.renderThrough) GL11.glDisable(GL11.GL_DEPTH_TEST); if (hint.renderThrough) GL11.glDisable(GL11.GL_DEPTH_TEST);
@@ -531,7 +541,7 @@ public class ClientProxy extends CommonProxy {
renderThrough = hint.renderThrough; renderThrough = hint.renderThrough;
} }
// TODO verify if we need to add eyeHeight // TODO verify if we need to add eyeHeight
hint.draw(tes, d0, d1, d2); hint.draw(tes, d0, d1, d2, i0, i1, i2);
} }
p.endStartSection("Draw"); p.endStartSection("Draw");
tes.draw(); tes.draw();
@@ -86,7 +86,7 @@ public class StructureLibAPI {
/** /**
* Check if instrumenting is enabled. * Check if instrumenting is enabled.
* *
* @return true if enabled, false otherwise * @return true if enabled, false otherwise
*/ */
public static boolean isInstrumentEnabled() { public static boolean isInstrumentEnabled() {
@@ -272,6 +272,13 @@ public class StructureLibAPI {
return StructureLib.itemBlockHint; return StructureLib.itemBlockHint;
} }
/**
* Get the hologram item.
*/
public static Item getDefaultHologramItem() {
return StructureLib.itemConstructableTrigger;
}
/** /**
* Check if structure debug mode is on. * Check if structure debug mode is on.
* *
@@ -42,54 +42,54 @@ import cpw.mods.fml.common.registry.GameRegistry;
/** /**
* A brief index of everything contained * A brief index of everything contained
* <h1>Control blocks</h1> A lot of these might seem to make more sense as a default function on * <h2>Control blocks</h2> A lot of these might seem to make more sense as a default function on
* {@link IStructureElement}. However, in that case javac generic will often fail to infer the type for you, so we have * {@link IStructureElement}. However, in that case javac generic will often fail to infer the type for you, so we have
* to define them as static methods * to define them as static methods
* <h1>If block</h1> Provide if block, allowing downstream call only if user specified conditions are meet (i.e. * <h2>If block</h2> Provide if block, allowing downstream call only if user specified conditions are meet (i.e.
* predicate returns true) * predicate returns true)
* <ul> * <ul>
* <li>{@link #onlyIf(Predicate, IStructureElement)} and its overloads</li> * <li>{@link #onlyIf(Predicate, IStructureElement)} and its overloads</li>
* </ul> * </ul>
* <h1>Switch block</h1> Provide switch block, allowing to select a downstream element by using a key or index computed * <h2>Switch block</h2> Provide switch block, allowing to select a downstream element by using a key or index computed
* from trigger item and/or context object. * from trigger item and/or context object.
* <ul> * <ul>
* <li>{@link #partitionBy(Function, IStructureElement[])} and its overloads</li> * <li>{@link #partitionBy(Function, IStructureElement[])} and its overloads</li>
* </ul> * </ul>
* <h1>Or Chain</h1> Provide a short-circuiting OR chain. * <h2>Or Chain</h2> Provide a short-circuiting OR chain.
* <ul> * <ul>
* <li>{@link #ofChain(IStructureElement[])} and its overloads</li> * <li>{@link #ofChain(IStructureElement[])} and its overloads</li>
* </ul> * </ul>
* <h2>Side effect</h2> Provide callbacks on various occasion * <h3>Side effect</h3> Provide callbacks on various occasion
* <ul> * <ul>
* <li>{@link #onElementPass(Consumer, IStructureElement)}: Call an callback upon element check success</li> * <li>{@link #onElementPass(Consumer, IStructureElement)}: Call an callback upon element check success</li>
* <li>{@link #onElementFail(Consumer, IStructureElement)}: Call an callback upon element check failure</li> * <li>{@link #onElementFail(Consumer, IStructureElement)}: Call an callback upon element check failure</li>
* </ul> * </ul>
* *
* <h1>Other Primitives</h1> * <h2>Other Primitives</h2>
* <h2>Error statement</h2> Unconditionally return false. * <h3>Error statement</h3> Unconditionally return false.
* <ul> * <ul>
* <li>{@link #error()}</li> * <li>{@link #error()}</li>
* </ul> * </ul>
* <h2>Context Object Change</h2> Switch the context object. * <h3>Context Object Change</h3> Switch the context object.
* <ul> * <ul>
* <li>{@link #withContext(IStructureElement)}: switch context to the extended context</li> * <li>{@link #withContext(IStructureElement)}: switch context to the extended context</li>
* </ul> * </ul>
* <h2>Channel Change</h2> Change the channel. See <a href="{@docRoot}/overview-summary.html#channels">Channels section * <h3>Channel Change</h3> Change the channel. See <a href="{@docRoot}/overview-summary.html#channels">Channels section
* on overview</a> for more information. * on overview</a> for more information.
* <ul> * <ul>
* <li>{@link #withChannel(String, IStructureElement)}: switch channel using * <li>{@link #withChannel(String, IStructureElement)}: switch channel using
* {@link ChannelDataAccessor#withChannel(ItemStack, String)} when a trigger item is present.</li> * {@link ChannelDataAccessor#withChannel(ItemStack, String)} when a trigger item is present.</li>
* </ul> * </ul>
* <h2>Spawn hint particle</h2> Just spawn a hint. Do nothing otherwise. Useful when you want to override the hint * <h3>Spawn hint particle</h3> Just spawn a hint. Do nothing otherwise. Useful when you want to override the hint
* provided by another structure element, or as a fallback to a structure element that is check only. * provided by another structure element, or as a fallback to a structure element that is check only.
* <ul> * <ul>
* <li>{@link #ofHint(int)}, {@link #ofHintDeferred(Supplier)} and its overloads</li> * <li>{@link #ofHint(int)}, {@link #ofHintDeferred(Supplier)} and its overloads</li>
* </ul> * </ul>
* *
* <h1>Actual Element</h1> These elements are elements that can actually do structure check, spawn hint and do auto * <h2>Actual Element</h2> These elements are elements that can actually do structure check, spawn hint and do auto
* place. Elements listed in above 2 sections are not going to be helpful without elements like these. They also serve * place. Elements listed in above 2 sections are not going to be helpful without elements like these. They also serve
* as a reference implementation for your own custom {@link IStructureElement} implementations. * as a reference implementation for your own custom {@link IStructureElement} implementations.
* <h2>Simple Block Element</h2> These accept one or more different block types in one location. * <h3>Simple Block Element</h3> These accept one or more different block types in one location.
* <ul> * <ul>
* <li>{@link #ofBlock(Block, int, Block, int)}, {@link #ofBlocksFlat(Map, Block, int)}, * <li>{@link #ofBlock(Block, int, Block, int)}, {@link #ofBlocksFlat(Map, Block, int)},
* {@link #ofBlocksMap(Map, Block, int)} and their overloads: the most basic form</li> * {@link #ofBlocksMap(Map, Block, int)} and their overloads: the most basic form</li>
@@ -98,7 +98,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
* <li>{@link #isAir()}, {@link #notAir()}: They are supplied by default under the identifier {@code '-'} and * <li>{@link #isAir()}, {@link #notAir()}: They are supplied by default under the identifier {@code '-'} and
* {@code '+'} respectively, but are provided here regardless in case you want to use them as a fallback.</li> * {@code '+'} respectively, but are provided here regardless in case you want to use them as a fallback.</li>
* </ul> * </ul>
* <h2>Complex Block Element</h2> In case your logic on determining which block is accepted is complex, use these. * <h3>Complex Block Element</h3> In case your logic on determining which block is accepted is complex, use these.
* <ul> * <ul>
* <li>{@link #ofBlockAdder(IBlockAdder, Block, int)}, {@link #ofBlockAdderHint(IBlockAdder, Block, int)} and their * <li>{@link #ofBlockAdder(IBlockAdder, Block, int)}, {@link #ofBlockAdderHint(IBlockAdder, Block, int)} and their
* overloads: hands off actual adder logic to an {@link IBlockAdder} you supplied. Save you the boilerplate of querying * overloads: hands off actual adder logic to an {@link IBlockAdder} you supplied. Save you the boilerplate of querying
@@ -110,7 +110,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
* Similar to block adder, but for tile entities.</li> * Similar to block adder, but for tile entities.</li>
* </ul> * </ul>
* *
* <h1>Helper Methods</h1> These don't construct a {@link IStructureElement}, but is helpful to the instantiation or * <h2>Helper Methods</h2> These don't construct a {@link IStructureElement}, but is helpful to the instantiation or
* implementation of these. * implementation of these.
* <ul> * <ul>
* <li>{@link #survivalPlaceBlock(Block, int, World, int, int, int, IItemSource, EntityPlayer, Consumer)} and its * <li>{@link #survivalPlaceBlock(Block, int, World, int, int, int, IItemSource, EntityPlayer, Consumer)} and its
@@ -595,7 +595,7 @@ public class StructureUtility {
* <b>Example:</b> * <b>Example:</b>
* <p> * <p>
* Assume you have 16 tier, each map to one block's 16 different meta. You will usually want something like this * Assume you have 16 tier, each map to one block's 16 different meta. You will usually want something like this
* *
* <pre> * <pre>
* public class Tile extends TileEntity { * public class Tile extends TileEntity {
* private static final Block B = getTargetBlock(); * private static final Block B = getTargetBlock();
+3 -3
View File
@@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!DOCTYPE html>
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>API Overview</TITLE> <TITLE>API Overview</TITLE>
@@ -219,9 +219,9 @@ whereas all these structure elements are designed without considering channels w
<pre> <pre>
import com.gtnewhorizon.structurelib.structure.IStructureElement; import com.gtnewhorizon.structurelib.structure.IStructureElement;
public class MyHatchElement&lt;T> implements IStructureElement&lt;T> { public class MyHatchElement&lt;T&gt; implements IStructureElement&lt;T&gt; {
//... //...
@Override {@literal @}Override
public PlaceResult survivalPlaceBlock( public PlaceResult survivalPlaceBlock(
Object o, Object o,
World world, World world,