mirror of
https://github.com/GTNewHorizons/Chisel.git
synced 2026-11-12 16:27:45 +00:00
Added in all of the original files
This commit is contained in:
1 parent
b61f5f1072
commit
aa52debeb5
1764 files changed
+15476
No files matched your search
@@ -0,0 +1,16 @@
|
||||
# text stuff
|
||||
*.java text
|
||||
*.sh text eol=lf
|
||||
*.bat text eol=crlf
|
||||
*.md text
|
||||
|
||||
#binary
|
||||
*.dat binary
|
||||
*.bin binary
|
||||
*.png binary
|
||||
*.exe binary
|
||||
*.dll binary
|
||||
*.zip binary
|
||||
*.jar binary
|
||||
*.7z binary
|
||||
*.db binary
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
#eclipse
|
||||
.project
|
||||
.classpath
|
||||
.metadata
|
||||
org.*
|
||||
bin
|
||||
|
||||
#idea
|
||||
.idea
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
out
|
||||
|
||||
#gradle
|
||||
build
|
||||
.gradle
|
||||
|
||||
#runtime
|
||||
eclipse
|
||||
run
|
||||
|
||||
#mac
|
||||
.DS_Store
|
||||
*.command
|
||||
@@ -0,0 +1,96 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
maven {
|
||||
name = "forge"
|
||||
url = "http://files.minecraftforge.net/maven"
|
||||
}
|
||||
maven {
|
||||
name = "sonatype"
|
||||
url = "https://oss.sonatype.org/content/repositories/snapshots/"
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
apply plugin: 'forge'
|
||||
version = "1.5.7"
|
||||
group = "info.jbcs.minecraft.chisel" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
archivesBaseName = "Chisel"
|
||||
|
||||
minecraft {
|
||||
version = "1.7.10-10.13.0.1207"
|
||||
runDir = "run"
|
||||
|
||||
replaceIn "Chisel.java"
|
||||
replace "@MOD_VERSION@", project.version
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name = "ChickenBones"
|
||||
url = "http://chickenbones.net/maven"
|
||||
}
|
||||
maven {
|
||||
name = "ProfMobius"
|
||||
url = "http://mobiusstrip.eu/maven"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'mcp.mobius.waila:Waila:1.5.3_1.7.10:dev'
|
||||
}
|
||||
|
||||
processResources
|
||||
{
|
||||
// this will ensure that this task is redone when the versions change.
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mcversion", project.minecraft.version
|
||||
|
||||
// replace stuff in mcmod.info, nothing else
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'mcmod.info'
|
||||
|
||||
// replace version and mcversion
|
||||
expand 'version': project.version, 'mcversion': project.minecraft.version
|
||||
}
|
||||
|
||||
// copy everything else, thats not the mcmod.info
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude 'mcmod.info'
|
||||
}
|
||||
}
|
||||
|
||||
// some crazy stuff to make sure the chicken stuff is in the mods folder...
|
||||
// because it wont work otherwise... because FML doesnt laod coremods from the classpath
|
||||
task copyChicken(type: Copy, dependsOn: "extractUserDev") {
|
||||
from { configurations.compile }
|
||||
include "**/*Chicken*.jar", "**/*NotEnoughItems*.jar"
|
||||
exclude "**/CodeChickenLib*" // because CCC downloads it anyways.. -_-
|
||||
into file(minecraft.runDir + "/mods")
|
||||
|
||||
mustRunAfter "deobfBinJar"
|
||||
mustRunAfter "repackMinecraft"
|
||||
}
|
||||
tasks.setupDevWorkspace.dependsOn copyChicken
|
||||
tasks.setupDecompWorkspace.dependsOn copyChicken
|
||||
|
||||
// Create deobf dev jars
|
||||
task deobfJar(type: Jar) {
|
||||
from sourceSets.main.output
|
||||
classifier = 'deobf'
|
||||
}
|
||||
|
||||
// Create source attachment for dev jar
|
||||
task sourcesJar(type: Jar) {
|
||||
from sourceSets.main.allJava
|
||||
classifier = 'sources'
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives deobfJar
|
||||
archives sourcesJar
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
1.5.7:
|
||||
Added the Laboratory block, a fancy new block added by GravitasShortfall
|
||||
Fixed issues with left clicking with the Chisel, thanks to Lordmau5/Konata
|
||||
Some locale things added so its not all only english.
|
||||
Fixes issues with crafting with sandstone blocks.
|
||||
Potentially fixes a issue with marble/limestone generation on multiplayer.
|
||||
|
||||
1.5.6b
|
||||
Fixed ice pillar crafting issue.
|
||||
Sounds work now.
|
||||
Bluepower support for marble (Haven't tested due to time issues <,<)
|
||||
Project Red support for marble fixed.
|
||||
Fixed the config for the Chisel crafting recipe.
|
||||
|
||||
1.5.6a
|
||||
Correct render for Lavastone.
|
||||
Stained Glass can now be made.
|
||||
Waila for block descriptions (Thanks to Parker8283 for the PR :3 )
|
||||
Fixed configuration for world generation
|
||||
|
||||
1.5.6
|
||||
Woolen Clay, textures by the all mighty shoop :)
|
||||
Japanese Paperwalls! Textures by Sayomi_Inoue
|
||||
Config for allowing you to create mossy brick from stone.
|
||||
Maybe I'm trying to confuse you again?
|
||||
|
||||
1.5.5a
|
||||
Fixed the unintended feature of crashing on servers.
|
||||
Maybe a secret hidden? Or i just feel like messing with you.
|
||||
|
||||
1.5.5
|
||||
Major parts of this update is brought to you by Zombiepig333, so go thank him :)
|
||||
Config for the amount of factory blocks you get.
|
||||
Half done locale support (For some block descriptions and the names)
|
||||
Works on 1.7.10 now, no crashes from AABB changes.
|
||||
Few bug fixes.
|
||||
|
||||
1.5.4g
|
||||
Fixed the latest crash with random items in the chisel inventory, will require Forge 1126 or above now.
|
||||
Fixed dirt blocks being able to give you blocks with no texture, this will shift the metadata in world, though!
|
||||
Few derps with the crafting stuff, now uses FMLs implementation of it.
|
||||
|
||||
1.5.4f
|
||||
Fixed a crash with the latest forge, you will now need to use the latest recommended :)
|
||||
Recipe for the road marker thingy.
|
||||
Fixed the dirt block issues.
|
||||
PR from anti334 that changes how the connected textures working, making them work better.
|
||||
|
||||
1.5.4e
|
||||
Fixed the issue of glowstone dropping the wrong metadata.
|
||||
Added in gregs suggestion of gem/metal blocks being usable in beacon bases
|
||||
|
||||
1.5.4d
|
||||
Fixed a derp with nether brick not being carvable, thanks to Soaryn for finding that derp :P
|
||||
|
||||
1.5.4c
|
||||
Fixed a crash bug with Carpenter's Blocks.
|
||||
Updated compatibility with Mariculture.
|
||||
|
||||
1.5.4b
|
||||
Fixed a small issue, thanks to tambry, this is the problem of taking over mods >.>
|
||||
|
||||
1.5.4a:
|
||||
Lavastone now emits light.
|
||||
Fixed issue with slabs, they can't be placed on the top of a block, will rewrite them soon.
|
||||
Noticed weird version issues >.>
|
||||
Fixed minor bugs
|
||||
Removed redundant System.out.println
|
||||
Smashing Rock is there, without texture and uncraftable, just ignore it for now :)
|
||||
|
||||
1.5.4:
|
||||
Fixed a few crashes client side with the Moss and Cloud projectile.
|
||||
Removed AsieLib dependancy.
|
||||
Added in a config option for cloud rendering.
|
||||
Fixed a few misc bugs.
|
||||
|
||||
Asies changes:
|
||||
|
||||
1.5.3 (18 March 2014)
|
||||
Added: Far more config-level configurability for the mod's available features and behaviour.
|
||||
Changed: The config format. Cleaned it up a bit. Watch out!
|
||||
Fixed: Marble stairs and limestone stairs now work!
|
||||
Fixed: Partially attempted to fix the “left-click-with-chisel to make block disappear” bug.
|
||||
1.5.2 (17 March 2014)
|
||||
Added: Chiselable Stained Glass and Stained Glass Panes.
|
||||
Changed: Textures are now compressed with pngout, cutting the mod's size from 4MB to 2.1MB - an almost 50% reduction!
|
||||
Changed: The internal mod-specific names used in the GameRegistry. worlds saved with Chisel 1.5.1 will *not* be compatible, and worlds saved with Minecraft 1.6.4 and below probably will not convert perfectly as well, but this was done for the better - mod collisions could've and would've happened otherwise.
|
||||
Fixed: NPE with certain blocks' rendering.
|
||||
1.5.1 (16 March 2014)
|
||||
Ported to Minecraft 1.7.2.
|
||||
Added: Support for Acacia and Dark Oak planks.
|
||||
Removed: Overriding vanilla blocks.
|
||||
Vendored
BIN
Binary file not shown.
+6
@@ -0,0 +1,6 @@
|
||||
#Wed Mar 26 13:33:58 CDT 2014
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip
|
||||
@@ -0,0 +1,164 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
##
|
||||
##############################################################################
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
|
||||
APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
case "`uname`" in
|
||||
CYGWIN* )
|
||||
cygwin=true
|
||||
;;
|
||||
Darwin* )
|
||||
darwin=true
|
||||
;;
|
||||
MINGW* )
|
||||
msys=true
|
||||
;;
|
||||
esac
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
|
||||
if $cygwin ; then
|
||||
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
|
||||
fi
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
# Resolve links: $0 may be a link
|
||||
PRG="$0"
|
||||
# Need this for relative symlinks.
|
||||
while [ -h "$PRG" ] ; do
|
||||
ls=`ls -ld "$PRG"`
|
||||
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||
if expr "$link" : '/.*' > /dev/null; then
|
||||
PRG="$link"
|
||||
else
|
||||
PRG=`dirname "$PRG"`"/$link"
|
||||
fi
|
||||
done
|
||||
SAVED="`pwd`"
|
||||
cd "`dirname \"$PRG\"`/" >&-
|
||||
APP_HOME="`pwd -P`"
|
||||
cd "$SAVED" >&-
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||
else
|
||||
JAVACMD="$JAVA_HOME/bin/java"
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD="java"
|
||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||
MAX_FD_LIMIT=`ulimit -H -n`
|
||||
if [ $? -eq 0 ] ; then
|
||||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||
MAX_FD="$MAX_FD_LIMIT"
|
||||
fi
|
||||
ulimit -n $MAX_FD
|
||||
if [ $? -ne 0 ] ; then
|
||||
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||
fi
|
||||
else
|
||||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Darwin, add options to specify how the application appears in the dock
|
||||
if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||
SEP=""
|
||||
for dir in $ROOTDIRSRAW ; do
|
||||
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||
SEP="|"
|
||||
done
|
||||
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||
# Add a user-defined pattern to the cygpath arguments
|
||||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||
fi
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
i=0
|
||||
for arg in "$@" ; do
|
||||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||
|
||||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||
function splitJvmOpts() {
|
||||
JVM_OPTS=("$@")
|
||||
}
|
||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||
|
||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||
Vendored
+90
@@ -0,0 +1,90 @@
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windowz variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
goto execute
|
||||
|
||||
:4NT_args
|
||||
@rem Get arguments from the 4NT Shell from JP Software
|
||||
set CMD_LINE_ARGS=%$
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||
exit /b 1
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@@ -0,0 +1,105 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
|
||||
public class BlockNameConversion
|
||||
{
|
||||
static final private HashMap<String, String> namingConversion = new HashMap<String, String>();
|
||||
|
||||
public static class NameConversions
|
||||
{
|
||||
public final static int MAX = 5;
|
||||
|
||||
protected static String conversion(String oldname, int step)
|
||||
{
|
||||
oldname = General.cleanTags(oldname);
|
||||
String newname = null;
|
||||
switch (step) {
|
||||
case 0: // lookup list
|
||||
return namingConversion.get(oldname);
|
||||
case 1: // simple lower case
|
||||
return oldname.toLowerCase();
|
||||
case 2: // rename "marbleSlab" -> "marble_slab", "blockRedstone" -> "redstone_block"
|
||||
newname = oldname.replaceAll("([a-z]+)([A-Z])", "$1_$2").toLowerCase();
|
||||
if (newname.startsWith("block_"))
|
||||
{
|
||||
newname = newname.replaceFirst("block_([a-z_]+)", "$1_block");
|
||||
}
|
||||
else if (newname.startsWith("snakestone_"))
|
||||
{
|
||||
newname = newname.replaceFirst("snakestone_([a-z_]+)", "$1_snakestone");
|
||||
}
|
||||
return newname;
|
||||
case 3: // rename "wood-dark-oak" -> "dark_oak_planks"
|
||||
newname = oldname.replaceAll("([a-z]+)([A-Z])", "$1_$2").toLowerCase().replace('-', '_');
|
||||
if (newname.contains("wood_"))
|
||||
{
|
||||
newname = newname.replaceFirst("wood_([a-z_]+)", "$1_planks");
|
||||
}
|
||||
return newname;
|
||||
case (MAX - 1): // ALWAYS last: rename "blockYxx" -> "yxx" (e.g. "blockDirt" -> "dirt").
|
||||
// This can be dangerous in cases like "blockCarpet" (a block) -> "carpet" (NO block)
|
||||
return oldname.replaceAll("([a-z]+)([A-Z])", "$1_$2").toLowerCase().replaceFirst("block_", "");
|
||||
default:
|
||||
throw new IndexOutOfBoundsException("conversion got invalid parameter step=" + step);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static public void init()
|
||||
{
|
||||
namingConversion.put("blockCobble", "cobblestone");
|
||||
namingConversion.put("iron", "iron_block");
|
||||
namingConversion.put("gold", "gold_block");
|
||||
namingConversion.put("diamond", "diamond_block");
|
||||
namingConversion.put("lightstone", "glowstone");
|
||||
namingConversion.put("lapis", "lapis_block");
|
||||
namingConversion.put("emerald", "emerald_block");
|
||||
namingConversion.put("hellrock", "netherrack");
|
||||
namingConversion.put("stoneMoss", "mossy_cobblestone");
|
||||
namingConversion.put("stoneBrick", "stonebrick");
|
||||
namingConversion.put("fenceIron", "iron_bars");
|
||||
namingConversion.put("blockFft", "fantasyblock");
|
||||
namingConversion.put("blockCarpetFloor", "carpet");
|
||||
namingConversion.put("blockTemple", "templeblock");
|
||||
namingConversion.put("blockTempleMossy", "mossy_templeblock");
|
||||
namingConversion.put("blockFactory", "factoryblock");
|
||||
namingConversion.put("blockLaboratory", "laboratoryblock");
|
||||
// "LightGray" is unfortunately converted to "light_gray"
|
||||
namingConversion.put("stainedGlassLightGray", "stained_glass_lightgray");
|
||||
namingConversion.put("stainedGlassPaneLightGray", "stained_glass_pane_lightgray");
|
||||
}
|
||||
|
||||
public static Item findItem(String oldname)
|
||||
{
|
||||
FMLLog.getLogger().trace("findItem() START " + oldname);
|
||||
Item item = null;
|
||||
for (int i = 0; i < NameConversions.MAX && item == null; i++)
|
||||
{
|
||||
FMLLog.getLogger().trace("findItem() Checking for " + NameConversions.conversion(oldname, i));
|
||||
item = GameRegistry.findItem(Chisel.MOD_ID, NameConversions.conversion(oldname, i));
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public static Block findBlock(String oldname)
|
||||
{
|
||||
FMLLog.getLogger().trace("findBlock() START: " + oldname);
|
||||
Block block = null;
|
||||
for (int i = 0; i < NameConversions.MAX && block == null; i++)
|
||||
{
|
||||
FMLLog.getLogger().trace("findBlock() Checking for " + NameConversions.conversion(oldname, i));
|
||||
block = GameRegistry.findBlock(Chisel.MOD_ID, NameConversions.conversion(oldname, i));
|
||||
}
|
||||
|
||||
return block;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,243 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockAutoChisel;
|
||||
import info.jbcs.minecraft.chisel.block.BlockCarvable;
|
||||
import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel;
|
||||
import info.jbcs.minecraft.chisel.client.gui.GuiAutoChisel;
|
||||
import info.jbcs.minecraft.chisel.client.gui.GuiChisel;
|
||||
import info.jbcs.minecraft.chisel.entity.EntityBallOMoss;
|
||||
import info.jbcs.minecraft.chisel.entity.EntityCloudInABottle;
|
||||
import info.jbcs.minecraft.chisel.entity.EntitySmashingRock;
|
||||
import info.jbcs.minecraft.chisel.inventory.ContainerAutoChisel;
|
||||
import info.jbcs.minecraft.chisel.inventory.ContainerChisel;
|
||||
import info.jbcs.minecraft.chisel.inventory.InventoryChiselSelection;
|
||||
import info.jbcs.minecraft.chisel.item.ItemBallOMoss;
|
||||
import info.jbcs.minecraft.chisel.item.ItemChisel;
|
||||
import info.jbcs.minecraft.chisel.item.ItemCloudInABottle;
|
||||
import info.jbcs.minecraft.chisel.item.ItemSmashingRock;
|
||||
import info.jbcs.minecraft.chisel.world.GeneratorLimestone;
|
||||
import info.jbcs.minecraft.chisel.world.GeneratorMarble;
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import cpw.mods.fml.client.event.ConfigChangedEvent;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.Mod;
|
||||
import cpw.mods.fml.common.Mod.EventHandler;
|
||||
import cpw.mods.fml.common.Mod.Instance;
|
||||
import cpw.mods.fml.common.SidedProxy;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
import cpw.mods.fml.common.event.FMLMissingMappingsEvent;
|
||||
import cpw.mods.fml.common.event.FMLMissingMappingsEvent.MissingMapping;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.network.IGuiHandler;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
import cpw.mods.fml.common.registry.EntityRegistry;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.common.registry.GameRegistry.Type;
|
||||
|
||||
|
||||
@Mod(modid = Chisel.MOD_ID, name = Chisel.MOD_NAME, version = "@MOD_VERSION@", guiFactory = "info.jbcs.minecraft.chisel.client.gui.GuiFactory"/*, dependencies = "after:ForgeMicroblock;"*/)
|
||||
public class Chisel
|
||||
{
|
||||
public static final String MOD_ID = "chisel";
|
||||
public static final String MOD_NAME = "Chisel";
|
||||
|
||||
public static ItemChisel chisel;
|
||||
// public static ItemChisel needle;
|
||||
public static ItemCloudInABottle itemCloudInABottle;
|
||||
public static ItemBallOMoss itemBallOMoss;
|
||||
public static ItemSmashingRock smashingRock;
|
||||
|
||||
public static CreativeTabs tabChisel;
|
||||
|
||||
public static boolean multipartLoaded = false;
|
||||
|
||||
public static final BlockCarvable.SoundType soundHolystoneFootstep = new BlockCarvable.SoundType("holystone", 1.0f, 1.0f);
|
||||
public static final BlockCarvable.SoundType soundTempleFootstep = new BlockCarvable.SoundType("dig.stone", MOD_ID+":step.templeblock", 1.0f, 1.0f);
|
||||
public static final BlockCarvable.SoundType soundMetalFootstep = new BlockCarvable.SoundType("metal", 1.0f, 1.0f);
|
||||
|
||||
public static Block autoChisel;
|
||||
|
||||
public static int RenderEldritchId;
|
||||
public static int RenderCTMId;
|
||||
public static int RenderCarpetId;
|
||||
|
||||
@Instance(MOD_ID)
|
||||
public static Chisel instance;
|
||||
|
||||
@SidedProxy(clientSide = "info.jbcs.minecraft.chisel.ClientProxy", serverSide = "info.jbcs.minecraft.chisel.CommonProxy")
|
||||
public static CommonProxy proxy;
|
||||
|
||||
@EventHandler
|
||||
public void missingMapping(FMLMissingMappingsEvent event)
|
||||
{
|
||||
BlockNameConversion.init();
|
||||
|
||||
for(MissingMapping m : event.get())
|
||||
{
|
||||
// This bug was introduced along with Chisel 1.5.2, and was fixed in 1.5.3.
|
||||
// Ice Stairs were called null.0-7 instead of other names, and Marble/Limestone stairs did not exist.
|
||||
// This fixes the bug.
|
||||
if(m.name.startsWith("null.") && m.name.length() == 6 && m.type == Type.BLOCK)
|
||||
{
|
||||
m.warn();//(Action.WARN);
|
||||
}
|
||||
|
||||
// Fix mapping of snakestoneSand, snakestoneStone, limestoneStairs, marbleStairs when loading an old (1.5.4) save
|
||||
else if(m.type == Type.BLOCK)
|
||||
{
|
||||
final Block block = BlockNameConversion.findBlock(m.name);
|
||||
|
||||
if(block != null)
|
||||
{
|
||||
m.remap(block);
|
||||
FMLLog.getLogger().info("Remapping block " + m.name + " to " + General.getName(block));
|
||||
} else
|
||||
FMLLog.getLogger().warn("Block " + m.name + " could not get remapped.");
|
||||
} else if(m.type == Type.ITEM)
|
||||
{
|
||||
final Item item = BlockNameConversion.findItem(m.name);
|
||||
|
||||
if(item != null)
|
||||
{
|
||||
m.remap(item);
|
||||
FMLLog.getLogger().info("Remapping item " + m.name + " to " + General.getName(item));
|
||||
|
||||
} else
|
||||
FMLLog.getLogger().warn("Item " + m.name + " could not get remapped.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event)
|
||||
{
|
||||
File configFile = event.getSuggestedConfigurationFile();
|
||||
Configurations.configExists = configFile.exists();
|
||||
Configurations.config = new Configuration(configFile);
|
||||
Configurations.config.load();
|
||||
Configurations.refreshConfig();
|
||||
|
||||
tabChisel = new CreativeTabs("tabChisel")
|
||||
{
|
||||
@Override
|
||||
public Item getTabIconItem()
|
||||
{
|
||||
return chisel;
|
||||
}
|
||||
};
|
||||
|
||||
chisel = (ItemChisel) new ItemChisel().setTextureName("chisel:chisel").setCreativeTab(CreativeTabs.tabTools);
|
||||
GameRegistry.registerItem(chisel, "chisel");
|
||||
|
||||
if(Configurations.featureEnabled("autoChisel")){
|
||||
autoChisel = new BlockAutoChisel().setBlockTextureName("Chisel:autoChisel").setCreativeTab(CreativeTabs.tabTools);
|
||||
GameRegistry.registerBlock(autoChisel, autoChisel.getUnlocalizedName());
|
||||
proxy.registerTileEntities();
|
||||
}
|
||||
|
||||
if(Configurations.featureEnabled("cloud"))
|
||||
{
|
||||
itemCloudInABottle = (ItemCloudInABottle) new ItemCloudInABottle().setTextureName("Chisel:cloudinabottle").setCreativeTab(CreativeTabs.tabTools);
|
||||
EntityRegistry.registerModEntity(EntityCloudInABottle.class, "CloudInABottle", 1, this, 40, 1, true);
|
||||
GameRegistry.registerItem(itemCloudInABottle, "cloudinabottle");
|
||||
}
|
||||
|
||||
if(Configurations.featureEnabled("ballOfMoss"))
|
||||
{
|
||||
itemBallOMoss = (ItemBallOMoss) new ItemBallOMoss().setTextureName("Chisel:ballomoss").setCreativeTab(CreativeTabs.tabTools);
|
||||
EntityRegistry.registerModEntity(EntityBallOMoss.class, "BallOMoss", 2, this, 40, 1, true);
|
||||
GameRegistry.registerItem(itemBallOMoss, "ballomoss");
|
||||
}
|
||||
|
||||
if(Configurations.featureEnabled("smashingRock"))
|
||||
{
|
||||
smashingRock = (ItemSmashingRock) new ItemSmashingRock().setTextureName("Chisel:smashingrock").setCreativeTab(CreativeTabs.tabTools);
|
||||
EntityRegistry.registerModEntity(EntitySmashingRock.class, "SmashingRock", 2, this, 40, 1, true);
|
||||
GameRegistry.registerItem(smashingRock, "smashingrock");
|
||||
}
|
||||
ChiselBlocks.load();
|
||||
proxy.preInit();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void init(FMLInitializationEvent event)
|
||||
{
|
||||
Crafting.init();
|
||||
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(this, new IGuiHandler()
|
||||
{
|
||||
@Override
|
||||
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
|
||||
{
|
||||
switch (ID){
|
||||
case 0:
|
||||
return new ContainerChisel(player.inventory, new InventoryChiselSelection(null));
|
||||
case 1:
|
||||
TileEntity tileentity = world.getTileEntity(x, y, z);
|
||||
if (tileentity instanceof TileEntityAutoChisel)
|
||||
return new ContainerAutoChisel(player.inventory, (TileEntityAutoChisel) tileentity);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
|
||||
{
|
||||
switch (ID){
|
||||
case 0:
|
||||
return new GuiChisel(player.inventory, new InventoryChiselSelection(null));
|
||||
case 1:
|
||||
TileEntity tileentity = world.getTileEntity(x, y, z);
|
||||
if (tileentity instanceof TileEntityAutoChisel)
|
||||
return new GuiAutoChisel(player.inventory, (TileEntityAutoChisel) tileentity);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
GameRegistry.registerWorldGenerator(new GeneratorMarble(ChiselBlocks.blockMarble, 32, Configurations.marbleAmount), 1000);
|
||||
GameRegistry.registerWorldGenerator(new GeneratorLimestone(ChiselBlocks.blockLimestone, 32, Configurations.limestoneAmount), 1000);
|
||||
|
||||
proxy.init();
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
MinecraftForge.EVENT_BUS.register(new ChiselLeftClick());
|
||||
FMLCommonHandler.instance().bus().register(instance);
|
||||
|
||||
FMLInterModComms.sendMessage("Waila", "register", "info.jbcs.minecraft.chisel.Waila.register");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void postInit(FMLPostInitializationEvent event)
|
||||
{
|
||||
Compatibility.init(event);
|
||||
}
|
||||
|
||||
|
||||
@SubscribeEvent
|
||||
public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event)
|
||||
{
|
||||
if(event.modID.equals("chisel"))
|
||||
{
|
||||
Configurations.refreshConfig();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,190 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import info.jbcs.minecraft.chisel.api.ChiselMode;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvingVariation;
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
import info.jbcs.minecraft.chisel.item.ItemChisel;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Random;
|
||||
|
||||
public class ChiselLeftClick
|
||||
{
|
||||
|
||||
HashMap<String, Long> chiselUseTime = new HashMap<String, Long>();
|
||||
HashMap<String, String> chiselUseLocation = new HashMap<String, String>();
|
||||
Random random = new Random();
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPlayerClick(PlayerInteractEvent event)
|
||||
{
|
||||
if(event.action != PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) return;
|
||||
if(!Configurations.enableChiseling) return;
|
||||
EntityPlayer player = event.entityPlayer;
|
||||
ItemStack stack = player.getHeldItem();
|
||||
if(stack == null || stack.getItem() != Chisel.chisel) return;
|
||||
|
||||
World world = event.world;
|
||||
int x = event.x;
|
||||
int y = event.y;
|
||||
int z = event.z;
|
||||
|
||||
Block block = world.getBlock(x, y, z);
|
||||
int blockMeta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
ItemStack chiselTarget = null;
|
||||
|
||||
if(stack.stackTagCompound != null)
|
||||
{
|
||||
chiselTarget = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("chiselTarget"));
|
||||
}
|
||||
|
||||
boolean chiselHasBlockInside = true;
|
||||
|
||||
if(chiselTarget == null)
|
||||
{
|
||||
chiselHasBlockInside = false;
|
||||
|
||||
Long useTime = chiselUseTime.get(player.getCommandSenderName());
|
||||
String loc = chiselUseLocation.get(player.getCommandSenderName());
|
||||
|
||||
if(useTime != null && chiselUseLocation != null && loc.equals(x + "|" + y + "|" + z))
|
||||
{
|
||||
long cooldown = 20;
|
||||
long time = world.getWorldInfo().getWorldTotalTime();
|
||||
|
||||
if(time > useTime - cooldown && time < useTime + cooldown) return; //noReplace = true;
|
||||
}
|
||||
|
||||
CarvingVariation[] variations = ItemChisel.carving.getVariations(block, blockMeta);
|
||||
if(variations == null || variations.length < 2) return; //noReplace = true;
|
||||
else
|
||||
{
|
||||
int index = blockMeta + 1;
|
||||
while(variations[index].block.equals(block) && variations[index].damage == blockMeta)
|
||||
{
|
||||
index++;
|
||||
if(index >= variations.length) index = 0;
|
||||
}
|
||||
CarvingVariation var = variations[index];
|
||||
chiselTarget = new ItemStack(var.block, 1, var.damage);
|
||||
}
|
||||
}
|
||||
Item result = null;
|
||||
int targetMeta = 0;
|
||||
|
||||
Item target = chiselTarget.getItem();
|
||||
|
||||
targetMeta = chiselTarget.getItemDamage();
|
||||
|
||||
boolean match = ItemChisel.carving.isVariationOfSameClass(Block.getBlockFromItem(target), targetMeta, block, blockMeta);
|
||||
result = target;
|
||||
|
||||
/* special case: stone can be carved to cobble and bricks */
|
||||
if(Configurations.chiselStoneToCobbleBricks)
|
||||
{
|
||||
if(!match && block.equals(Blocks.stone) && Block.getBlockFromItem(target).equals(ChiselBlocks.blockCobblestone))
|
||||
match = true;
|
||||
if(!match && block.equals(Blocks.stone) && Block.getBlockFromItem(target).equals(ChiselBlocks.stoneBrick))
|
||||
match = true;
|
||||
}
|
||||
if(!match)
|
||||
return; //noReplace = true;
|
||||
|
||||
int updateValue = 1;
|
||||
|
||||
if(!world.isRemote || chiselHasBlockInside)
|
||||
{
|
||||
world.setBlock(x, y, z, Block.getBlockFromItem(result), targetMeta, updateValue);
|
||||
world.markBlockForUpdate(x, y, z);
|
||||
}
|
||||
|
||||
switch(FMLCommonHandler.instance().getEffectiveSide())
|
||||
{
|
||||
case SERVER:
|
||||
chiselUseTime.put(player.getCommandSenderName(), world.getWorldInfo().getWorldTotalTime());
|
||||
chiselUseLocation.put(player.getCommandSenderName(), x + "|" + y + "|" + z);
|
||||
|
||||
try
|
||||
{
|
||||
//TODO chisel left click thingy
|
||||
// Packet packet = Chisel.packet.create(Packets.CHISELED).writeInt(x).writeInt(y).writeInt(z);
|
||||
// Chisel.packet.sendToAllAround(packet, new TargetPoint(player.dimension, x, y, z, 30.0f));
|
||||
} catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
break;
|
||||
|
||||
case CLIENT:
|
||||
if(chiselHasBlockInside)
|
||||
{
|
||||
String sound = ItemChisel.carving.getVariationSound(result, chiselTarget.getItemDamage());
|
||||
GeneralChiselClient.spawnChiselEffect(x, y, z, sound);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
stack.damageItem(1, player);
|
||||
if(stack.stackSize == 0)
|
||||
{
|
||||
player.inventory.mainInventory[player.inventory.currentItem] = chiselHasBlockInside ? chiselTarget : null;
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onBlockBreak(BlockEvent.BreakEvent event)
|
||||
{
|
||||
if(!Configurations.enableChiseling) return;
|
||||
EntityPlayer player = event.getPlayer();
|
||||
ItemStack stack = player.getHeldItem();
|
||||
if(stack == null || stack.getItem() != Chisel.chisel) return;
|
||||
|
||||
event.setCanceled(true);
|
||||
}
|
||||
|
||||
|
||||
public static void setBlock(World world, int x, int y, int z, ChiselMode chiselMode, Block previousBlock, int previousMetadata, Block newBlock, int newMetadata, ForgeDirection direction)
|
||||
{
|
||||
if(chiselMode == ChiselMode.SINGLE)
|
||||
{
|
||||
world.setBlock(x, y, z, newBlock, newMetadata, 2);
|
||||
} else if(chiselMode == ChiselMode.CIRCLETHREE)
|
||||
{
|
||||
int radius = 1;
|
||||
for(int i = -radius; i <= radius; i++)
|
||||
for(int j = -radius; j <= radius; j++)
|
||||
{
|
||||
//TODO facing stuff so this can be anywhere
|
||||
if(world.getBlock(x + i, y, z + j) != null)
|
||||
{
|
||||
if(world.getBlock(x + i, y, z + j) == previousBlock && world.getBlockMetadata(x + i, y, z + j) == previousMetadata)
|
||||
{
|
||||
int shiftedX = x;
|
||||
int shiftedY = y;
|
||||
int shiftedZ = z;
|
||||
|
||||
world.setBlock(shiftedX, shiftedY, shiftedZ, newBlock, newMetadata, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import info.jbcs.minecraft.chisel.carving.Carving;
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public class ChiselModCompatibility
|
||||
{
|
||||
|
||||
|
||||
abstract class ClassCompat
|
||||
{
|
||||
Class cl;
|
||||
|
||||
public ClassCompat(String name)
|
||||
{
|
||||
try
|
||||
{
|
||||
if((cl = Class.forName(name)) != null)
|
||||
action();
|
||||
} catch(ClassNotFoundException e)
|
||||
{
|
||||
//e.printStackTrace();
|
||||
} catch(IllegalArgumentException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
} catch(IllegalAccessException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
} catch(NoSuchFieldException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
} catch(SecurityException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
} catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
abstract void action() throws Exception;
|
||||
|
||||
abstract class BlockCompat
|
||||
{
|
||||
Block block;
|
||||
|
||||
public BlockCompat(String variableName) throws Exception
|
||||
{
|
||||
block = (Block) ClassCompat.this.cl.getField(variableName).get(null);
|
||||
|
||||
if(block != null)
|
||||
action();
|
||||
}
|
||||
|
||||
abstract void action() throws Exception;
|
||||
}
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
abstract class ClassBlockCompat
|
||||
{
|
||||
Block block;
|
||||
|
||||
ClassBlockCompat(final String className, final String blockName)
|
||||
{
|
||||
new ClassCompat(className)
|
||||
{
|
||||
@Override
|
||||
void action() throws Exception
|
||||
{
|
||||
new BlockCompat(blockName)
|
||||
{
|
||||
@Override
|
||||
void action() throws Exception
|
||||
{
|
||||
ClassBlockCompat.this.doAction(block);
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void doAction(Block b)
|
||||
{
|
||||
block = b;
|
||||
|
||||
action();
|
||||
}
|
||||
|
||||
abstract void action();
|
||||
}
|
||||
|
||||
|
||||
public void postInit(FMLPostInitializationEvent event)
|
||||
{
|
||||
new ClassBlockCompat("shukaro.artifice.ArtificeBlocks", "blockMarble")
|
||||
{
|
||||
@Override
|
||||
void action()
|
||||
{
|
||||
Carving.chisel.addVariation("marble", block, 0, 99);
|
||||
block.setHarvestLevel("chisel", 0, 0);
|
||||
}
|
||||
};
|
||||
new ClassBlockCompat("num.numirp.block.ModBlocks", "blockDecor")
|
||||
{
|
||||
@Override
|
||||
void action()
|
||||
{
|
||||
Carving.chisel.addVariation("marble", block, 0, 99);
|
||||
block.setHarvestLevel("chisel", 0, 0);
|
||||
}
|
||||
};
|
||||
|
||||
new ClassBlockCompat("mariculture.core.Core", "limestone")
|
||||
{
|
||||
@Override
|
||||
void action()
|
||||
{
|
||||
Carving.chisel.addVariation("limestone", block, 0, 99);
|
||||
block.setHarvestLevel("chisel", 0, 0);
|
||||
}
|
||||
};
|
||||
new ClassBlockCompat("emasher.core.EmasherCore", "limestone")
|
||||
{
|
||||
@Override
|
||||
void action()
|
||||
{
|
||||
Carving.chisel.addVariation("limestone", block, 0, 99);
|
||||
block.setHarvestLevel("chisel", 0, 0);
|
||||
}
|
||||
};
|
||||
|
||||
new ClassCompat("Reika.GeoStrata.GeoStrata")
|
||||
{
|
||||
@Override
|
||||
void action() throws Exception
|
||||
{
|
||||
Block[] blocks = (Block[]) cl.getField("blocks").get(null);
|
||||
|
||||
Carving.chisel.addVariation("marble", blocks[0], 2, 99);
|
||||
blocks[0].setHarvestLevel("chisel", 0, 2);
|
||||
|
||||
Carving.chisel.addVariation("limestone", blocks[0], 3, 99);
|
||||
blocks[0].setHarvestLevel("chisel", 0, 3);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import info.jbcs.minecraft.chisel.entity.EntityBallOMoss;
|
||||
import info.jbcs.minecraft.chisel.entity.EntityCloudInABottle;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockAdvancedMarbleRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockCarpetRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockEldritchRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockMarblePaneRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockMarblePillarRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockMarbleStairsRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockNoCTMRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockRoadLineRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockSnakeStoneRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockSpikesRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockTexturedOreRenderer;
|
||||
import info.jbcs.minecraft.chisel.client.render.ItemChiselRenderer;
|
||||
import net.minecraft.client.renderer.entity.RenderSnowball;
|
||||
import net.minecraftforge.client.MinecraftForgeClient;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class ClientProxy extends CommonProxy
|
||||
{
|
||||
ItemChiselRenderer renderer = new ItemChiselRenderer();
|
||||
|
||||
@Override
|
||||
public void preInit()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
RenderingRegistry.registerBlockHandler(new BlockMarbleStairsRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockMarblePaneRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockRoadLineRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockSnakeStoneRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockNoCTMRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockSpikesRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockMarblePillarRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockEldritchRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockAdvancedMarbleRenderer());
|
||||
RenderingRegistry.registerBlockHandler(new BlockCarpetRenderer());
|
||||
|
||||
RenderingRegistry.registerBlockHandler(new BlockTexturedOreRenderer());
|
||||
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityCloudInABottle.class, new RenderSnowball(Chisel.itemCloudInABottle));
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityBallOMoss.class, new RenderSnowball(Chisel.itemBallOMoss));
|
||||
|
||||
MinecraftForgeClient.registerItemRenderer(Chisel.chisel, renderer);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
public class CommonProxy
|
||||
{
|
||||
public void registerTileEntities() {
|
||||
registerTileEntity(TileEntityAutoChisel.class, "autoChisel");
|
||||
}
|
||||
|
||||
private void registerTileEntity(Class<? extends TileEntity> cls, String baseName) {
|
||||
GameRegistry.registerTileEntity(cls, "tile.autoChisel." + baseName);
|
||||
}
|
||||
public void preInit()
|
||||
{
|
||||
}
|
||||
|
||||
public void init()
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import info.jbcs.minecraft.chisel.carving.Carving;
|
||||
|
||||
public class Compatibility
|
||||
{
|
||||
|
||||
public static void init(FMLPostInitializationEvent event)
|
||||
{
|
||||
new ChiselModCompatibility().postInit(event);
|
||||
|
||||
addSupport("ProjRed|Exploration", "projectred.exploration.stone", "marble", 0, 99);
|
||||
addSupport("bluepower", "marble", "marble", 0, 99);
|
||||
|
||||
addSupport("PFAAGeologica", "strongStone", "marble", 5, 99);
|
||||
addSupport("PFAAGeologica", "strongStoneSlab", "marbleSlab", 5, 99);
|
||||
addSupport("PFAAGeologica", "strongStoneBrickStairs.marble", "marbleStairs", 0, 99);
|
||||
addSupport("PFAAGeologica", "mediumStone", "limestone", 0, 99);
|
||||
addSupport("PFAAGeologica", "mediumStoneSlab", "limestoneSlab", 0, 99);
|
||||
addSupport("PFAAGeologica", "mediumStoneBrickStairs.limestone", "limestoneStairs", 0, 99);
|
||||
addSupport("PFAAGeologica", "strongStoneBrick", "stoneBrick", 3, 99);
|
||||
addSupport("PFAAGeologica", "strongCobble", "cobblestone", 3, 99);
|
||||
}
|
||||
|
||||
public static void addSupport(String modname, String blockname, String name, int metadata, int order)
|
||||
{
|
||||
if(Loader.isModLoaded(modname) && GameRegistry.findBlock(modname, blockname) != null)
|
||||
{
|
||||
Carving.chisel.addVariation(name, GameRegistry.findBlock(modname, blockname), metadata, order);
|
||||
GameRegistry.findBlock(modname, blockname).setHarvestLevel("chisel", 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
|
||||
public class Configurations
|
||||
{
|
||||
public static Configuration config;
|
||||
|
||||
public static boolean configExists;
|
||||
public static boolean oldPillars;
|
||||
public static boolean disableCTM;
|
||||
public static boolean blockDescriptions;
|
||||
public static boolean ghostCloud;
|
||||
public static boolean allowMossy;
|
||||
public static boolean chiselStoneToCobbleBricks;
|
||||
public static boolean enableChiseling;
|
||||
public static boolean chiselRecipe;
|
||||
public static boolean autoChisel;
|
||||
|
||||
public static int factoryBlockAmount;
|
||||
public static int particlesTickrate;
|
||||
public static int marbleAmount;
|
||||
public static int limestoneAmount;
|
||||
|
||||
public static double concreteVelocity;
|
||||
|
||||
public static boolean refreshConfig()
|
||||
{
|
||||
concreteVelocity = config.get("general", "concreteVelocity", 0.45, "Traversing concrete roads, players will acceleration to this velocity. For reference, normal running speed is about 0.28. Set to 0 to disable acceleration.").getDouble(0.45);
|
||||
particlesTickrate = config.get("client", "particleTickrate", 1, "Particle tick rate. Greater value = less particles.").getInt(1);
|
||||
oldPillars = config.get("client", "pillarOldGraphics", false, "Use old pillar textures").getBoolean(false);
|
||||
disableCTM = !config.get("client", "connectedTextures", true, "Enable connected textures").getBoolean(true);
|
||||
blockDescriptions = config.get("client", "tooltipsUseBlockDescriptions", true, "Make variations of blocks have the same name, and use the description in tooltip to distinguish them.").getBoolean(true);
|
||||
chiselStoneToCobbleBricks = config.get("general", "chiselStoneToCobbleBricks", true, "Chisel stone to cobblestone and bricks by left-click.").getBoolean(true);
|
||||
enableChiseling = config.get("general", "enableChiselingLeftClicking", false, "Change blocks to another block using the Chisel and left-click.").getBoolean(false);
|
||||
ghostCloud = config.get("general", "doesCloudRenderLikeGhost", true).getBoolean(true);
|
||||
factoryBlockAmount = config.get("general", "amountYouGetFromFactoryBlockCrafting", 32).getInt(32);
|
||||
allowMossy = config.get("general", "allowCobbleToMossyInChisel", true).getBoolean(true);
|
||||
marbleAmount = config.get("worldgen", "marbleAmount", 7, "Amount of marble to generate in the world; use 0 for none").getInt(7);
|
||||
limestoneAmount = config.get("worldgen", "limestoneAmount", 8, "Amount of limestone to generate in the world; use 0 for none").getInt(8);
|
||||
chiselRecipe = config.get("general", "chiselAlternateRecipe", false, "Use alternative crafting recipe for the chisel").getBoolean(false);
|
||||
autoChisel = config.get("general", "autoChisel", true, "Should people be allowed to use the auto chisel").getBoolean(false);
|
||||
|
||||
if(config.hasChanged())
|
||||
{
|
||||
config.save();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean featureEnabled(String feature)
|
||||
{
|
||||
return config.get("features", feature, true).getBoolean(true) && refreshConfig();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.FurnaceRecipes;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||
|
||||
public class Crafting
|
||||
{
|
||||
|
||||
|
||||
public static void init()
|
||||
{
|
||||
Block concreteRecipeBlock = Block.getBlockFromName(Configurations.config.get("tweaks", "concrete recipe block", "gravel", "Unlocalized name of the block that, when burned, will produce concrete (examples: lightgem, stone)").getString());
|
||||
if(concreteRecipeBlock == null) concreteRecipeBlock = Blocks.gravel;
|
||||
|
||||
FurnaceRecipes.smelting().func_151393_a(concreteRecipeBlock, new ItemStack(ChiselBlocks.blockConcrete), 0.1F);
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockSandstoneScribbles, 1), new Object[]{"X", 'X', new ItemStack(ChiselBlocks.blockSandstone, 1, 8),});
|
||||
for(int meta = 0; meta < 16; meta++)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockMarbleSlab, 6, 0), new Object[]{"***", '*', new ItemStack(ChiselBlocks.blockMarble, 1, meta)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockLimestoneSlab, 6, 0), new Object[]{"***", '*', new ItemStack(ChiselBlocks.blockLimestone, 1, meta)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockMarblePillarSlab, 6, 0), new Object[]{"***", '*', new ItemStack(ChiselBlocks.blockMarblePillar, 1, meta)});
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockMarblePillar, 6), new Object[]{"XX", "XX", "XX", 'X', new ItemStack(ChiselBlocks.blockMarble, 1, meta),});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockMarble, 4), new Object[]{"XX", "XX", 'X', new ItemStack(ChiselBlocks.blockMarblePillar, 1, meta),});
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockIcePillar, 6, 1), new Object[]{"XX", "XX", "XX", 'X', new ItemStack(ChiselBlocks.blockIce, 1, meta),});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockIce, 4, 1), new Object[]{"XX", "XX", 'X', new ItemStack(ChiselBlocks.blockIcePillar, 1, meta),});
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(Blocks.sandstone, 1, 1), new Object[]{"X", 'X', new ItemStack(ChiselBlocks.blockSandstoneScribbles, 1, meta),});
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockCarpet, 8, meta), new Object[]{"YYY", "YXY", "YYY", 'X', new ItemStack(Items.string, 1), 'Y', new ItemStack(Blocks.wool, 1, meta),});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockCarpetFloor, 3, meta), new Object[]{"XX", 'X', new ItemStack(ChiselBlocks.blockCarpet, 1, meta),});
|
||||
}
|
||||
|
||||
// The following recipe is due to bugs with Chisel 1.5.1 to 1.5.6a
|
||||
GameRegistry.addRecipe(new ItemStack(Blocks.sandstone, 1, 0), new Object[]{"X", 'X', new ItemStack(ChiselBlocks.blockSandstone, 1, 0),});
|
||||
|
||||
// The following recipe is due to bug with Chisel 1.5.6b
|
||||
GameRegistry.addRecipe(new ItemStack(Blocks.sandstone, 1, 1), new Object[]{"X", 'X', new ItemStack(ChiselBlocks.blockSandstone, 1, 1),});
|
||||
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockHolystone, 8, 0), new Object[]{"***", "*X*", "***", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.feather, 1)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockLavastone, 8, 0), new Object[]{"***", "*X*", "***", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.lava_bucket, 1)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockFft, 8, 0), new Object[]{"***", "*X*", "***", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.gold_nugget, 1)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockTyrian, 8, 0), new Object[]{"***", "*X*", "***", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.iron_ingot, 1)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockTemple, 8, 0), new Object[]{"***", "*X*", "***", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.dye, 1, 4)});
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockFactory, Configurations.factoryBlockAmount, 0), new Object[]{"*X*", "X X", "*X*", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.iron_ingot, 1)});
|
||||
|
||||
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselBlocks.blockRoadLine, 8, 0), new Object[]{"wrw", "wrw", "wrw", ('w'), "dyeWhite", ('r'), Items.redstone}));
|
||||
|
||||
if(Configurations.chiselRecipe)
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(Chisel.chisel, 1), new Object[]{" YY", " YY", "X ", 'X', Items.stick, 'Y', Items.iron_ingot});
|
||||
} else
|
||||
{
|
||||
GameRegistry.addRecipe(new ItemStack(Chisel.chisel, 1), new Object[]{" Y", "X ", 'X', Items.stick, 'Y', Items.iron_ingot});
|
||||
}
|
||||
|
||||
if(Configurations.featureEnabled("ballOfMoss"))
|
||||
GameRegistry.addRecipe(new ItemStack(Chisel.itemBallOMoss, 1), new Object[]{"XYX", "YXY", "XYX", 'X', Blocks.vine, 'Y', Items.stick});
|
||||
if(Configurations.featureEnabled("cloud"))
|
||||
GameRegistry.addRecipe(new ItemStack(Chisel.itemCloudInABottle, 1), new Object[]{"X X", "XYX", " X ", 'X', Blocks.glass, 'Y', Items.quartz});
|
||||
|
||||
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ChiselBlocks.blockPaperwall, 8), new Object[]{"ppp", "psp", "ppp", ('p'), Items.paper, ('s'), "stickWood"}));
|
||||
|
||||
String[] sGNames = new String[]{
|
||||
"White", "Orange", "Magenta", "Light Blue",
|
||||
"Yellow", "Lime", "Pink", "Gray",
|
||||
"Light Gray", "Cyan", "Purple", "Blue",
|
||||
"Brown", "Green", "Red", "Black"
|
||||
};
|
||||
|
||||
for(int i = 0; i < 16; i++)
|
||||
{
|
||||
OreDictionary.registerOre("stainedClay" + sGNames[i].replaceAll(" ", ""), new ItemStack(Blocks.stained_hardened_clay, 1, i));
|
||||
OreDictionary.registerOre("blockWool" + sGNames[i].replaceAll(" ", ""), new ItemStack(Blocks.wool, 1, i));
|
||||
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ChiselBlocks.blockWoolenClay, 2, i), new Object[]{"blockWool" + sGNames[i].replaceAll(" ", ""), "stainedClay" + sGNames[i].replaceAll(" ", "")}));
|
||||
}
|
||||
|
||||
GameRegistry.addRecipe(new ItemStack(ChiselBlocks.blockLaboratory, 8, 0), new Object[]{"***", "*X*", "***", '*', new ItemStack(Blocks.stone, 1), 'X', new ItemStack(Items.quartz, 1)});
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.Carving;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.network.INetHandler;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
||||
|
||||
public class Packets// extends MessageHandlerBase
|
||||
{
|
||||
|
||||
//TODO packet
|
||||
public static final int CHISELED = 1;
|
||||
/*
|
||||
|
||||
public void onChiseled(Packet stream, EntityPlayer player) throws IOException
|
||||
{
|
||||
final int x = stream.readInt();
|
||||
final int y = stream.readInt();
|
||||
final int z = stream.readInt();
|
||||
|
||||
switch(FMLCommonHandler.instance().getEffectiveSide())
|
||||
{
|
||||
case SERVER:
|
||||
Packet packet = Chisel.packet.create(CHISELED).writeInt(x).writeInt(y).writeInt(z);
|
||||
Chisel.packet.sendToAllAround(packet, new TargetPoint(player.dimension, x, y, z, 30.0f));
|
||||
break;
|
||||
case CLIENT:
|
||||
Block block = player.worldObj.getBlock(x, y, z);
|
||||
int blockMeta = player.worldObj.getBlockMetadata(x, y, z);
|
||||
GeneralChiselClient.spawnChiselEffect(x, y, z, Carving.chisel.getVariationSound(block, blockMeta));
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(Packet packet, INetHandler handler,
|
||||
EntityPlayer player, int command) throws IOException
|
||||
{
|
||||
switch(command)
|
||||
{
|
||||
case CHISELED:
|
||||
onChiseled(packet, player);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package info.jbcs.minecraft.chisel;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockCarvable;
|
||||
import mcp.mobius.waila.api.IWailaConfigHandler;
|
||||
import mcp.mobius.waila.api.IWailaDataAccessor;
|
||||
import mcp.mobius.waila.api.IWailaDataProvider;
|
||||
import mcp.mobius.waila.api.IWailaRegistrar;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Waila implements IWailaDataProvider
|
||||
{
|
||||
|
||||
@Override
|
||||
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler configHandler)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getWailaHead(ItemStack stack, List<String> strings, IWailaDataAccessor accessor, IWailaConfigHandler configHandler)
|
||||
{
|
||||
return strings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getWailaBody(ItemStack stack, List<String> strings, IWailaDataAccessor accessor, IWailaConfigHandler configHandler)
|
||||
{
|
||||
if(accessor.getBlock() instanceof BlockCarvable)
|
||||
{
|
||||
BlockCarvable block = (BlockCarvable) accessor.getBlock();
|
||||
strings.add(block.getVariation(accessor.getMetadata()).description);
|
||||
}
|
||||
return strings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getWailaTail(ItemStack stack, List<String> strings, IWailaDataAccessor accessor, IWailaConfigHandler configHandler)
|
||||
{
|
||||
return strings;
|
||||
}
|
||||
|
||||
public static void register(IWailaRegistrar registrar)
|
||||
{
|
||||
Waila instance = new Waila();
|
||||
registrar.registerBodyProvider(instance, BlockCarvable.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package info.jbcs.minecraft.chisel.api;
|
||||
|
||||
public enum ChiselMode
|
||||
{
|
||||
|
||||
SINGLE,
|
||||
CIRCLETHREE,
|
||||
COLLUM,
|
||||
SIDEWAYS
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package info.jbcs.minecraft.chisel.api;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
|
||||
public interface ICarvable
|
||||
{
|
||||
public CarvableVariation getVariation(int metadata);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package info.jbcs.minecraft.chisel.api;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IChiselMode
|
||||
{
|
||||
public ChiselMode getChiselMode(ItemStack itemStack);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package info.jbcs.minecraft.chisel.api;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public interface IFacade {
|
||||
|
||||
int getFacadeMetadata(IBlockAccess world, int x, int y, int z, int side);
|
||||
|
||||
Block getFacade(IBlockAccess world, int x, int y, int z, int side);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockAutoChisel extends BlockContainer
|
||||
{
|
||||
public BlockAutoChisel()
|
||||
{
|
||||
super(Material.rock);
|
||||
setBlockName("autoChisel");
|
||||
setHardness(1F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int metadata, float x1, float y1, float z1){
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if(world.isRemote)
|
||||
return true;
|
||||
if(tile !=null && tile instanceof TileEntityAutoChisel)
|
||||
player.openGui(Chisel.instance, 1, world, x, y, z);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block block, int par6){
|
||||
dropItems(world, x, y, z);
|
||||
super.breakBlock(world, x, y, z, block, par6);
|
||||
}
|
||||
|
||||
private void dropItems(World world, int x, int y, int z){
|
||||
Random random = new Random();
|
||||
TileEntity tileEntity = world.getTileEntity(x, y, z);
|
||||
|
||||
if(!(tileEntity instanceof IInventory)){
|
||||
return;
|
||||
}
|
||||
|
||||
IInventory inventory = (IInventory) tileEntity;
|
||||
|
||||
for(int c = 0; c < inventory.getSizeInventory(); c++){
|
||||
ItemStack stack = inventory.getStackInSlot(c);
|
||||
|
||||
if(stack != null && stack.stackSize > 0){
|
||||
float rx = random.nextFloat() * 0.8F + 0.1F;
|
||||
float ry = random.nextFloat() * 0.8F + 0.1F;
|
||||
float rz = random.nextFloat() * 0.8F + 0.1F;
|
||||
EntityItem entityItem = new EntityItem(world, x + rx, y + ry, z + rz, stack);
|
||||
|
||||
if(stack.hasTagCompound()){
|
||||
entityItem.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy());
|
||||
}
|
||||
|
||||
float factor = 0.05F;
|
||||
entityItem.motionX = random.nextGaussian() * factor;
|
||||
entityItem.motionY = random.nextGaussian() * factor + 0.2F;
|
||||
entityItem.motionZ = random.nextGaussian() * factor;
|
||||
world.spawnEntityInWorld(entityItem);
|
||||
stack.stackSize = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World var1, int var2)
|
||||
{
|
||||
return new TileEntityAutoChisel();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
/**
|
||||
* Created by Pokefenn
|
||||
*/
|
||||
public class BlockBeaconBase extends BlockCarvable
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockCarvable extends Block implements ICarvable
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
private boolean isAlpha;
|
||||
|
||||
public BlockCarvable()
|
||||
{
|
||||
this(Material.rock);
|
||||
}
|
||||
|
||||
public BlockCarvable(Material m)
|
||||
{
|
||||
super(m);
|
||||
carverHelper = new CarvableHelper();
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
public BlockCarvable setStained(boolean a)
|
||||
{
|
||||
this.isAlpha = a;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getRenderBlockPass()
|
||||
{
|
||||
return isAlpha ? 1 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
return carverHelper.getIcon(world, x, y, z, side);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return Chisel.RenderCTMId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
|
||||
|
||||
public static class SoundType extends Block.SoundType
|
||||
{
|
||||
public final String soundNameStep;
|
||||
public final String soundNameBreak;
|
||||
public final String soundNamePlace;
|
||||
|
||||
/**
|
||||
* Creates a SoundType with automatic names for step and break sounds.
|
||||
* Sound names dig.soundName and step.soundName must be specified in the
|
||||
* sounds.json
|
||||
*
|
||||
* @param soundName
|
||||
* block of the sound. Will automatically be expanded to
|
||||
* "mod:dig.soundName" and "mod:step.soundName" respectively)
|
||||
* @param volume
|
||||
* default 1.0f
|
||||
* @param frequency
|
||||
* default 1.0f
|
||||
*/
|
||||
public SoundType(String soundName, float volume, float frequency)
|
||||
{
|
||||
super(soundName, volume, frequency);
|
||||
this.soundNameStep = null;
|
||||
this.soundNameBreak = null;
|
||||
this.soundNamePlace = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SoundType with manual names for step and break sounds.
|
||||
* Sound names must be specified in the sounds.json
|
||||
*
|
||||
* @param soundNameBreak
|
||||
* block break sound
|
||||
* @param soundNameStep
|
||||
* block step sound
|
||||
* @param volume
|
||||
* default 1.0f
|
||||
* @param frequency
|
||||
* default 1.0f
|
||||
*/
|
||||
public SoundType(String soundNameBreak, String soundNameStep, float volume, float frequency)
|
||||
{
|
||||
super(soundNameStep, volume, frequency);
|
||||
this.soundNameStep = soundNameStep;
|
||||
this.soundNameBreak = soundNameBreak;
|
||||
this.soundNamePlace = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SoundType with manual names for step, break and place
|
||||
* sounds. Sound names must be specified in the sounds.json
|
||||
*
|
||||
* @param soundNameBreak
|
||||
* block break sound
|
||||
* @param soundNameStep
|
||||
* block step sound
|
||||
* @param soundNamePlace
|
||||
* block place sound
|
||||
* @param volume
|
||||
* default 1.0f
|
||||
* @param frequency
|
||||
* default 1.0f
|
||||
*/
|
||||
public SoundType(String soundNameBreak, String soundNameStep, String soundNamePlace, float volume, float frequency)
|
||||
{
|
||||
super(soundNameStep, volume, frequency);
|
||||
this.soundNameStep = soundNameStep;
|
||||
this.soundNameBreak = soundNameBreak;
|
||||
this.soundNamePlace = soundNamePlace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBreakSound()
|
||||
{
|
||||
if(soundNameBreak == null)
|
||||
return Chisel.MOD_ID + ":dig." + this.soundName;
|
||||
else
|
||||
return this.soundNameBreak;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStepResourcePath()
|
||||
{
|
||||
if(soundNameStep == null)
|
||||
return Chisel.MOD_ID + ":step." + this.soundName;
|
||||
else
|
||||
return this.soundNameStep;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String func_150496_b()
|
||||
{
|
||||
if(soundNamePlace == null)
|
||||
return getBreakSound();
|
||||
else
|
||||
return this.soundNamePlace;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import net.minecraft.block.BlockGlass;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockCarvableGlass extends BlockGlass implements ICarvable
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
private boolean isAlpha = false;
|
||||
|
||||
public BlockCarvableGlass()
|
||||
{
|
||||
super(Material.glass, false);
|
||||
|
||||
carverHelper = new CarvableHelper();
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
public BlockCarvableGlass setStained(boolean a)
|
||||
{
|
||||
this.isAlpha = a;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return Chisel.RenderCTMId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getRenderBlockPass()
|
||||
{
|
||||
return isAlpha ? 1 : 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockMarblePaneRenderer;
|
||||
import net.minecraft.block.BlockPane;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockCarvablePane extends BlockPane implements ICarvable
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
public boolean isAlpha;
|
||||
|
||||
public BlockCarvablePane(Material material, boolean drops)
|
||||
{
|
||||
super("", "", material, drops);
|
||||
|
||||
carverHelper = new CarvableHelper();
|
||||
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
public BlockCarvablePane setStained(boolean a)
|
||||
{
|
||||
this.isAlpha = a;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getRenderBlockPass()
|
||||
{
|
||||
return isAlpha ? 1 : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockMarblePaneRenderer.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class BlockCarvablePowered extends BlockCarvable
|
||||
{
|
||||
public BlockCarvablePowered(Material m)
|
||||
{
|
||||
super(m);
|
||||
}
|
||||
|
||||
/**
|
||||
* Can this block provide power. Only wire currently seems to have this
|
||||
* change based on its state.
|
||||
*/
|
||||
@Override
|
||||
public boolean canProvidePower()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the block is emitting indirect/weak redstone power on the
|
||||
* specified side. If isBlockNormalCube returns true, standard redstone
|
||||
* propagation rules will apply instead and this will not be called. Args:
|
||||
* World, X, Y, Z, side. Note that the side is reversed - eg it is 1 (up)
|
||||
* when checking the bottom of the block.
|
||||
*/
|
||||
@Override
|
||||
public int isProvidingWeakPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
|
||||
{
|
||||
return 15;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockCarvablePumpkin extends BlockCarvable
|
||||
{
|
||||
|
||||
public BlockCarvablePumpkin()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onBlockPlaced(World world_, int x, int y, int z_, int p_149660_5_, float p_149660_6_, float p_149660_7_, float p_149660_8_, int p_149660_9_)
|
||||
{
|
||||
return p_149660_9_;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
|
||||
import info.jbcs.minecraft.chisel.Configurations;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockCloud extends BlockCarvable
|
||||
{
|
||||
|
||||
public BlockCloud()
|
||||
{
|
||||
super(Material.ice);
|
||||
useNeighborBrightness = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
|
||||
{
|
||||
entity.fallDistance = 0.0F;
|
||||
|
||||
if(entity.motionY < 0.0D)
|
||||
{
|
||||
entity.motionY *= 0.0050000000000000001D;
|
||||
} else if(entity.motionY > 0)
|
||||
{
|
||||
entity.motionY += 0.0285;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getRenderBlockPass()
|
||||
{
|
||||
return Configurations.ghostCloud ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l)
|
||||
{
|
||||
return super.shouldSideBeRendered(iblockaccess, i, j, k, 1 - l);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k)
|
||||
{
|
||||
return AxisAlignedBB.getBoundingBox(i + 0.2, j, k + 0.2, i + 0.8, j + 0.2, k + 0.8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int par1, Random rand, int par3)
|
||||
{
|
||||
return Item.getItemFromBlock(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random rand)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import info.jbcs.minecraft.chisel.Configurations;
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockConcrete extends BlockCarvable
|
||||
{
|
||||
|
||||
public BlockConcrete()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
|
||||
{
|
||||
float f = 0.125F;
|
||||
return AxisAlignedBB.getBoundingBox(par2, par3, par4, (par2 + 1), ((par3 + 1) - f), (par4 + 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
|
||||
{
|
||||
if(FMLCommonHandler.instance().getEffectiveSide() != Side.CLIENT)
|
||||
return;
|
||||
if(Configurations.concreteVelocity == 0)
|
||||
return;
|
||||
|
||||
GeneralChiselClient.speedupPlayer(world, entity, Configurations.concreteVelocity);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
|
||||
|
||||
public class BlockEldritch extends BlockCarvable
|
||||
{
|
||||
|
||||
public BlockEldritch()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return Chisel.RenderEldritchId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockHolystone extends BlockCarvable
|
||||
{
|
||||
public IIcon iconStar;
|
||||
|
||||
public BlockHolystone(Material m)
|
||||
{
|
||||
super(m);
|
||||
|
||||
this.setLightLevel(0.25F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void randomDisplayTick(World world, int x, int y, int z, Random random)
|
||||
{
|
||||
if(General.rand.nextInt(4) == 0 && world.isRemote)
|
||||
GeneralChiselClient.spawnHolystoneFX(world, this, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
super.registerBlockIcons(register);
|
||||
|
||||
iconStar = register.registerIcon("Chisel:holystone/particles/star");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockLavastone extends BlockMarbleTexturedOre
|
||||
{
|
||||
public BlockLavastone(Material mat, String baseIcon)
|
||||
{
|
||||
super(mat, baseIcon);
|
||||
setLightLevel(1F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void randomDisplayTick(World world, int x, int y, int z, Random random)
|
||||
{
|
||||
if(random.nextInt(8) == 0 && world.isRemote)
|
||||
GeneralChiselClient.spawnLavastoneFX(world, this, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockLightstoneCarvable extends BlockCarvable
|
||||
{
|
||||
public BlockLightstoneCarvable()
|
||||
{
|
||||
super(Material.glass);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random random)
|
||||
{
|
||||
return Blocks.glowstone.quantityDropped(random);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int i, Random random, int a)
|
||||
{
|
||||
return Items.glowstone_dust;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public class BlockMarbleBookshelf extends BlockCarvable
|
||||
{
|
||||
|
||||
public BlockMarbleBookshelf()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
if(side < 2)
|
||||
return Blocks.planks.getBlockTextureFromSide(side);
|
||||
return super.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
if(side < 2)
|
||||
return Blocks.planks.getBlockTextureFromSide(side);
|
||||
return super.getIcon(world, x, y, z, side);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random par1Random)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int par1, Random par2Random, int par3)
|
||||
{
|
||||
return Items.book;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEnchantPowerBonus(World world, int x, int y, int z)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.BlockCarpet;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class BlockMarbleCarpet extends BlockCarpet implements ICarvable
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
|
||||
public BlockMarbleCarpet(Material m)
|
||||
{
|
||||
carverHelper = new CarvableHelper();
|
||||
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
return carverHelper.getIcon(world, x, y, z, side);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return Chisel.RenderCarpetId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockIce;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.stats.StatList;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockMarbleIce extends BlockIce implements ICarvable
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
|
||||
public BlockMarbleIce()
|
||||
{
|
||||
super();
|
||||
carverHelper = new CarvableHelper();
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6)
|
||||
{
|
||||
super.harvestBlock(par1World, par2EntityPlayer, par3, par4, par5, par6);
|
||||
|
||||
par2EntityPlayer.addStat(StatList.mineBlockStatArray[Block.getIdFromBlock(this)], 1);
|
||||
par2EntityPlayer.addExhaustion(0.025F);
|
||||
|
||||
/*
|
||||
if(this.canSilkHarvest(par1World, par2EntityPlayer, par3, par4, par5, par6) && EnchantmentHelper.getSilkTouchModifier(par2EntityPlayer))
|
||||
{
|
||||
ItemStack itemstack = this.createStackedBlock(par6);
|
||||
|
||||
if(itemstack != null)
|
||||
{
|
||||
this.dropBlockAsItem(par1World, par3, par4, par5, itemstack);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.ChiselBlocks;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockMarbleIceStairs extends BlockMarbleStairs
|
||||
{
|
||||
public BlockMarbleIceStairs(Block block, int meta, CarvableHelper helper)
|
||||
{
|
||||
super(block, meta, helper);
|
||||
|
||||
slipperiness = 0.98F;
|
||||
setTickRandomly(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void harvestBlock(World par1World, EntityPlayer par2EntityPlayer, int par3, int par4, int par5, int par6)
|
||||
{
|
||||
ChiselBlocks.blockIce.harvestBlock(par1World, par2EntityPlayer, par3, par4, par5, par6);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random par1Random)
|
||||
{
|
||||
return ChiselBlocks.blockIce.quantityDropped(par1Random);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
|
||||
{
|
||||
ChiselBlocks.blockIce.updateTick(par1World, par2, par3, par4, par5Random);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMobilityFlag()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockMarbleLamp extends BlockCarvable
|
||||
{
|
||||
BlockMarbleLamp blockUnpowered;
|
||||
BlockMarbleLamp blockPowered;
|
||||
boolean powered;
|
||||
|
||||
public BlockMarbleLamp()
|
||||
{
|
||||
super(Material.redstoneLight);
|
||||
|
||||
powered = false;
|
||||
blockUnpowered = this;
|
||||
blockPowered = new BlockMarbleLamp(this);
|
||||
|
||||
setHardness(0.3F);
|
||||
}
|
||||
|
||||
public BlockMarbleLamp(BlockMarbleLamp unpoweredVersion)
|
||||
{
|
||||
super(Material.redstoneLight);
|
||||
|
||||
carverHelper = unpoweredVersion.carverHelper;
|
||||
|
||||
powered = true;
|
||||
blockUnpowered = unpoweredVersion;
|
||||
blockPowered = this;
|
||||
|
||||
setLightLevel(1.0F);
|
||||
setHardness(0.3F);
|
||||
}
|
||||
|
||||
|
||||
public void checkPower(World world, int x, int y, int z)
|
||||
{
|
||||
if(world.isRemote) return;
|
||||
|
||||
boolean isGettingPower = world.isBlockIndirectlyGettingPowered(x, y, z);
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if(powered && !isGettingPower)
|
||||
{
|
||||
world.setBlock(x, y, z, blockUnpowered, meta, 2);
|
||||
} else if(!powered && isGettingPower)
|
||||
{
|
||||
world.setBlock(x, y, z, blockPowered, meta, 2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockAdded(World world, int x, int y, int z)
|
||||
{
|
||||
checkPower(world, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
|
||||
{
|
||||
checkPower(world, x, y, z);
|
||||
}
|
||||
|
||||
/*
|
||||
@Override
|
||||
public void updateTick(World world, int x, int y, int z, Random rand){
|
||||
if (world.isRemote) return;
|
||||
|
||||
if(powered && !world.isBlockIndirectlyGettingPowered(x, y, z)){
|
||||
int meta=world.getBlockMetadata(x, y, z);
|
||||
world.setBlock(x, y, z, Block.redstoneLampIdle.blockID, meta, 2);
|
||||
}
|
||||
}*/
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int par1, Random par2Random, int par3)
|
||||
{
|
||||
return Item.getItemFromBlock(blockUnpowered);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z)
|
||||
{
|
||||
return new ItemStack(blockUnpowered, 1, world.getBlockMetadata(x, y, z));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockMarblePillarRenderer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class BlockMarblePillar extends BlockCarvable
|
||||
{
|
||||
public IIcon sides[] = new IIcon[6];
|
||||
|
||||
public BlockMarblePillar(Material m)
|
||||
{
|
||||
super(m);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockMarblePillarRenderer.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return sides[side];
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
return sides[side];
|
||||
}
|
||||
|
||||
public IIcon getCtmIcon(int index, int metadata)
|
||||
{
|
||||
CarvableVariation var = carverHelper.variations.get(metadata);
|
||||
|
||||
if(index >= 4) return var.iconTop;
|
||||
if(var.seamsCtmVert == null) return var.icon;
|
||||
return var.seamsCtmVert.icons[index];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockMarbleSlab extends BlockCarvable
|
||||
{
|
||||
public Block master;
|
||||
public BlockMarbleSlab bottom;
|
||||
public BlockMarbleSlab top;
|
||||
public boolean isBottom;
|
||||
|
||||
public BlockMarbleSlab(BlockCarvable marble)
|
||||
{
|
||||
opaque = true;
|
||||
|
||||
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||||
|
||||
master = marble;
|
||||
bottom = this;
|
||||
top = new BlockMarbleSlab(this);
|
||||
|
||||
isBottom = true;
|
||||
}
|
||||
|
||||
public BlockMarbleSlab(BlockMarbleSlab bottomBlock)
|
||||
{
|
||||
super();
|
||||
setBlockBounds(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
master = bottomBlock.master;
|
||||
bottom = bottomBlock;
|
||||
top = this;
|
||||
|
||||
carverHelper = bottomBlock.carverHelper;
|
||||
isBottom = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
|
||||
{
|
||||
if(isBottom)
|
||||
{
|
||||
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||||
} else
|
||||
{
|
||||
setBlockBounds(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockBoundsForItemRender()
|
||||
{
|
||||
setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCollisionBoxesToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity)
|
||||
{
|
||||
setBlockBoundsBasedOnState(par1World, par2, par3, par4);
|
||||
super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta)
|
||||
{
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int par1, Random par2Random, int par3)
|
||||
{
|
||||
return Item.getItemFromBlock(bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public ItemStack getPickBlock(MovingObjectPosition mop, World world, int x, int y, int z)
|
||||
{
|
||||
return new ItemStack(bottom, 1, world.getBlockMetadata(x, y, z));
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
// return master.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item block, CreativeTabs tabs, List list)
|
||||
{
|
||||
if(isBottom)
|
||||
super.getSubBlocks(block, tabs, list);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockMarbleStairsRenderer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockStairs;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockMarbleStairs extends BlockStairs implements ICarvable
|
||||
{
|
||||
CarvableHelper carverHelper;
|
||||
int blockMeta;
|
||||
|
||||
public BlockMarbleStairs(Block block, int meta, CarvableHelper helper)
|
||||
{
|
||||
super(block, meta);
|
||||
|
||||
this.useNeighborBrightness = true;
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
carverHelper = helper;
|
||||
blockMeta = meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, blockMeta + metadata / 8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i & 0x8;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
if(blockMeta == 0)
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item block, CreativeTabs tabs, List list)
|
||||
{
|
||||
list.add(new ItemStack(block, 1, 0));
|
||||
list.add(new ItemStack(block, 1, 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockMarbleStairsRenderer.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLiving, ItemStack par6ItemStack)
|
||||
{
|
||||
int l = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
|
||||
int i1 = par1World.getBlockMetadata(par2, par3, par4) & 4;
|
||||
int odd = par6ItemStack.getItemDamage();
|
||||
|
||||
if(l == 0)
|
||||
{
|
||||
par1World.setBlockMetadataWithNotify(par2, par3, par4, 2 | i1 + odd, 2);
|
||||
}
|
||||
|
||||
if(l == 1)
|
||||
{
|
||||
par1World.setBlockMetadataWithNotify(par2, par3, par4, 1 | i1 + odd, 2);
|
||||
}
|
||||
|
||||
if(l == 2)
|
||||
{
|
||||
par1World.setBlockMetadataWithNotify(par2, par3, par4, 3 | i1 + odd, 2);
|
||||
}
|
||||
|
||||
if(l == 3)
|
||||
{
|
||||
par1World.setBlockMetadataWithNotify(par2, par3, par4, 0 | i1 + odd, 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int onBlockPlaced(World world, int x, int y, int z, int side, float hx, float hy, float hz, int damage)
|
||||
{
|
||||
// int res=super.onBlockPlaced();
|
||||
return side != 0 && (side == 1 || hy <= 0.5D) ? damage : damage | 4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.item.ItemCarvable;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.CraftingManager;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockMarbleStairsMaker
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
BlockMarbleStairs blocks[];
|
||||
|
||||
//int idStart;
|
||||
Block blockBase;
|
||||
String blockName;
|
||||
|
||||
public BlockMarbleStairsMaker(Block base)
|
||||
{
|
||||
carverHelper = new CarvableHelper();
|
||||
blockBase = base;
|
||||
}
|
||||
|
||||
public void create(String name)
|
||||
{
|
||||
create(null, name);
|
||||
}
|
||||
|
||||
public void create(BlockMarbleStairsMakerCreator creator, String name)
|
||||
{
|
||||
blocks = new BlockMarbleStairs[carverHelper.variations.size() / 2];
|
||||
for(int i = 0; i < blocks.length; i++)
|
||||
{
|
||||
String n = name + "." + i;
|
||||
blocks[i] = creator == null ?
|
||||
new BlockMarbleStairs(blockBase, i * 2, carverHelper) :
|
||||
creator.create(blockBase, i * 2, carverHelper);
|
||||
|
||||
blocks[i].setBlockName(n);
|
||||
GameRegistry.registerBlock(blocks[i], ItemCarvable.class, n);
|
||||
|
||||
for(int meta = 0; meta < 2 && i * 2 + meta < carverHelper.variations.size(); meta++)
|
||||
{
|
||||
CarvableVariation variation = carverHelper.variations.get(i * 2 + meta);
|
||||
|
||||
for(int j = 0; j < 8; j++)
|
||||
carverHelper.registerVariation(name + ".orientation." + j, variation, blocks[i], j + meta * 8);
|
||||
|
||||
CraftingManager.getInstance().addRecipe(new ItemStack(blocks[i], 4, meta * 8), new Object[]{"* ", "** ", "***", '*', new ItemStack(blockBase, 1, i * 2 + meta)});
|
||||
}
|
||||
|
||||
CarvableHelper.chiselBlocks.add(blocks[i]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public interface BlockMarbleStairsMakerCreator
|
||||
{
|
||||
public BlockMarbleStairs create(Block block, int meta, CarvableHelper helper);
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class BlockMarbleTexturedOre extends BlockTexturedOre implements ICarvable
|
||||
{
|
||||
public CarvableHelper carverHelper;
|
||||
|
||||
public BlockMarbleTexturedOre(Material mat, String baseIcon)
|
||||
{
|
||||
super(mat, baseIcon);
|
||||
|
||||
carverHelper = new CarvableHelper();
|
||||
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
super.registerBlockIcons(register);
|
||||
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item block, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
return carverHelper.getVariation(metadata);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockWall;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class BlockMarbleWall extends BlockWall
|
||||
{
|
||||
CarvableHelper carverHelper;
|
||||
|
||||
public BlockMarbleWall(Block block)
|
||||
{
|
||||
super(block);
|
||||
|
||||
carverHelper = new CarvableHelper();
|
||||
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
return carverHelper.getIcon(side, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
carverHelper.registerBlockIcons("Chisel", this, register);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item block, CreativeTabs tabs, List list)
|
||||
{
|
||||
carverHelper.registerSubBlocks(this, tabs, list);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockRoadLineRenderer;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockRoadLine extends Block
|
||||
{
|
||||
public IIcon aloneIcon;
|
||||
public IIcon halfLineIcon;
|
||||
public IIcon fullLineIcon;
|
||||
|
||||
public BlockRoadLine()
|
||||
{
|
||||
super(Material.circuits);
|
||||
|
||||
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.00390625f, 1.0f);
|
||||
// this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.0625F, 1.0F);
|
||||
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockRoadLineRenderer.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
|
||||
{
|
||||
return par1World.doesBlockHaveSolidTopSurface(par1World, par2, par3 - 1, par4) || par1World.getBlock(par2, par3 - 1, par4).equals(Blocks.glowstone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, Block block)
|
||||
{
|
||||
if(par1World.isRemote) return;
|
||||
|
||||
if(!this.canPlaceBlockAt(par1World, par2, par3, par4))
|
||||
{
|
||||
this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0);
|
||||
par1World.setBlockToAir(par2, par3, par4);
|
||||
}
|
||||
|
||||
super.onNeighborBlockChange(par1World, par2, par3, par4, block);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister reg)
|
||||
{
|
||||
blockIcon = aloneIcon = reg.registerIcon("Chisel:line-marking/white-center");
|
||||
halfLineIcon = reg.registerIcon("Chisel:line-marking/white-side");
|
||||
fullLineIcon = reg.registerIcon("Chisel:line-marking/white-long");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,576 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockSnakeStoneRenderer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockSnakestone extends Block
|
||||
{
|
||||
static final int SEC_HEAD = 0;
|
||||
static final int SEC_DOWN = 4;
|
||||
static final int SEC_UP = 8;
|
||||
static final int SEC_HOR = 12;
|
||||
|
||||
static final int SIDE_B = 0;
|
||||
static final int SIDE_T = 1;
|
||||
static final int SIDE_N = 2;
|
||||
static final int SIDE_S = 3;
|
||||
static final int SIDE_W = 4;
|
||||
static final int SIDE_E = 5;
|
||||
|
||||
String iconPrefix;
|
||||
IIcon iconFaceLeft;
|
||||
IIcon iconFaceRight;
|
||||
IIcon iconCross;
|
||||
IIcon iconFace;
|
||||
IIcon iconTopTip;
|
||||
IIcon iconTopSide;
|
||||
IIcon iconBottom;
|
||||
IIcon iconBottomSide;
|
||||
IIcon iconBottomTip;
|
||||
IIcon iconLeftDown;
|
||||
IIcon iconRightDown;
|
||||
IIcon iconLeftUp;
|
||||
IIcon iconRightUp;
|
||||
IIcon iconLeftTip;
|
||||
IIcon iconSide;
|
||||
IIcon iconRightTip;
|
||||
IIcon iconTop;
|
||||
|
||||
public boolean flipTopTextures;
|
||||
|
||||
public BlockSnakestone(String iconPrefix)
|
||||
{
|
||||
super(Material.rock);
|
||||
setHardness(1.5F);
|
||||
setResistance(10.0F);
|
||||
setStepSound(Block.soundTypeStone);
|
||||
setCreativeTab(Chisel.tabChisel);
|
||||
flipTopTextures = false;
|
||||
|
||||
this.iconPrefix = iconPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockSnakeStoneRenderer.id;
|
||||
}
|
||||
|
||||
static final int[] rotRemap = {0, 3, 1, 2};
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
if(meta > 3) return;
|
||||
|
||||
if(rotateHead(world, x, y, z) != -1)
|
||||
return;
|
||||
|
||||
int rot = rotRemap[(MathHelper.floor_double(entity.rotationYaw * 4.0 / 360.0 + 0.5)) & 3];
|
||||
|
||||
world.setBlockMetadataWithNotify(x, y, z, rot, 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onBlockPlaced(World world, int x, int y, int z, int side, float hx, float hy, float hz, int meta)
|
||||
{
|
||||
if(meta <= 3) return meta;
|
||||
|
||||
if(rotateBodyPart(world, x, y, z))
|
||||
{
|
||||
return world.getBlockMetadata(x, y, z);
|
||||
}
|
||||
|
||||
if(side == 0 || side == 1) meta = 14;
|
||||
if(side == 2 || side == 3) meta = 13;
|
||||
if(side == 4 || side == 5) meta = 12;
|
||||
|
||||
world.setBlockMetadataWithNotify(x, y, z, meta, 2);
|
||||
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
|
||||
{
|
||||
int kind = world.getBlockMetadata(x, y, z) & 0xC;
|
||||
|
||||
if(kind == 0)
|
||||
{
|
||||
rotateHead(world, x, y, z);
|
||||
} else
|
||||
{
|
||||
rotateBodyPart(world, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
public int[] getConnections(World world, int ox, int oy, int oz)
|
||||
{
|
||||
int index = 0;
|
||||
int[] res = {-1, -1, -1, -1, -1, -1, -1};
|
||||
|
||||
for(int direction = 0; direction < 6; direction++)
|
||||
{
|
||||
int x = ox, y = oy, z = oz;
|
||||
switch(direction)
|
||||
{
|
||||
case 0:
|
||||
z--;
|
||||
break;
|
||||
case 1:
|
||||
z++;
|
||||
break;
|
||||
case 2:
|
||||
x--;
|
||||
break;
|
||||
case 3:
|
||||
x++;
|
||||
break;
|
||||
case 4:
|
||||
y--;
|
||||
break;
|
||||
case 5:
|
||||
y++;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!world.getBlock(x, y, z).equals(this)) continue;
|
||||
boolean match = false;
|
||||
|
||||
int px1 = x, px2 = x;
|
||||
int py1 = y, py2 = y;
|
||||
int pz1 = z, pz2 = z;
|
||||
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
if((meta & 0xc) == 4 || (meta & 0xc) == 8)
|
||||
{
|
||||
if((meta & 4) == 4) py1--;
|
||||
else py1++;
|
||||
|
||||
switch(meta & 3)
|
||||
{
|
||||
case 0:
|
||||
pz2--;
|
||||
break;
|
||||
case 1:
|
||||
pz2++;
|
||||
break;
|
||||
case 2:
|
||||
px2--;
|
||||
break;
|
||||
case 3:
|
||||
px2++;
|
||||
break;
|
||||
}
|
||||
} else if(meta == 12)
|
||||
{
|
||||
px1--;
|
||||
px2++;
|
||||
} else if(meta == 13)
|
||||
{
|
||||
pz1--;
|
||||
pz2++;
|
||||
} else if(meta == 14)
|
||||
{
|
||||
py1--;
|
||||
py2++;
|
||||
} else if(meta == 15)
|
||||
{
|
||||
match = true;
|
||||
} else if(meta < 4)
|
||||
{
|
||||
match = true;
|
||||
}
|
||||
|
||||
if(!match)
|
||||
{
|
||||
Block b1 = world.getBlock(px1, py1, pz1);
|
||||
Block b2 = world.getBlock(px2, py2, pz2);
|
||||
|
||||
|
||||
if(b1 != this || b2 != this)
|
||||
match = true;
|
||||
|
||||
if(ox == px1 && oy == py1 && oz == pz1)
|
||||
match = true;
|
||||
|
||||
if(ox == px2 && oy == py2 && oz == pz2)
|
||||
match = true;
|
||||
}
|
||||
|
||||
if(match)
|
||||
res[index++] = direction;
|
||||
}
|
||||
|
||||
if(index != 5)
|
||||
res[index] = -1;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
public boolean rotateBodyPart(World world, int x, int y, int z)
|
||||
{
|
||||
int[] con = getConnections(world, x, y, z);
|
||||
int blockMeta = world.getBlockMetadata(x, y, z);
|
||||
int kind = blockMeta & 0xc;
|
||||
|
||||
if(con[1] == -1) return false;
|
||||
if(con[2] != -1) return false;
|
||||
|
||||
int meta = 15;
|
||||
|
||||
if(con[0] == 2 && con[1] == 3)
|
||||
{
|
||||
meta = 12;
|
||||
} else if(con[0] == 0 && con[1] == 1)
|
||||
{
|
||||
meta = 13;
|
||||
} else if(con[0] == 4 && con[1] == 5)
|
||||
{
|
||||
meta = 14;
|
||||
} else if(con[1] == 4)
|
||||
{
|
||||
meta = SEC_DOWN | con[0];
|
||||
} else if(con[1] == 5)
|
||||
{
|
||||
meta = SEC_UP | con[0];
|
||||
}
|
||||
|
||||
if(blockMeta != meta)
|
||||
world.setBlockMetadataWithNotify(x, y, z, meta, 3);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int rotateHead(World world, int x, int y, int z)
|
||||
{
|
||||
int[] con = getConnections(world, x, y, z);
|
||||
|
||||
if(con[1] >= 0 && con[1] < 4) return -1;
|
||||
|
||||
int meta = -1;
|
||||
switch(con[0])
|
||||
{
|
||||
case 0:
|
||||
meta = 1;
|
||||
break;
|
||||
case 1:
|
||||
meta = 0;
|
||||
break;
|
||||
case 2:
|
||||
meta = 3;
|
||||
break;
|
||||
case 3:
|
||||
meta = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
if(meta == -1) return -1;
|
||||
|
||||
world.setBlock(x, y, z, this, meta, 3);
|
||||
return meta;
|
||||
}
|
||||
|
||||
public boolean connectedTo(World par1World, int x, int y, int z, int direction)
|
||||
{
|
||||
switch(direction)
|
||||
{
|
||||
case 0:
|
||||
return par1World.getBlock(x, y, z - 1).equals(this);
|
||||
case 1:
|
||||
return par1World.getBlock(x, y, z + 1).equals(this);
|
||||
case 2:
|
||||
return par1World.getBlock(x - 1, y, z).equals(this);
|
||||
case 3:
|
||||
return par1World.getBlock(x + 1, y, z).equals(this);
|
||||
case 4:
|
||||
return par1World.getBlock(x, y - 1, z).equals(this);
|
||||
case 5:
|
||||
return par1World.getBlock(x, y + 1, z).equals(this);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int meta)
|
||||
{
|
||||
int type = meta & 0xc;
|
||||
int orient = meta & 0x3;
|
||||
|
||||
switch(meta | (side << 4))
|
||||
{
|
||||
|
||||
case (SEC_HOR | 0 | (SIDE_B << 4)):
|
||||
return iconBottomTip;
|
||||
case (SEC_HOR | 0 | (SIDE_T << 4)):
|
||||
return iconTopSide;
|
||||
case (SEC_HOR | 0 | (SIDE_N << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 0 | (SIDE_S << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 0 | (SIDE_W << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HOR | 0 | (SIDE_E << 4)):
|
||||
return iconCross;
|
||||
|
||||
case (SEC_HOR | 1 | (SIDE_B << 4)):
|
||||
return iconBottomTip;
|
||||
case (SEC_HOR | 1 | (SIDE_T << 4)):
|
||||
return iconTopSide;
|
||||
case (SEC_HOR | 1 | (SIDE_N << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HOR | 1 | (SIDE_S << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HOR | 1 | (SIDE_W << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 1 | (SIDE_E << 4)):
|
||||
return iconSide;
|
||||
|
||||
case (SEC_HOR | 2 | (SIDE_B << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HOR | 2 | (SIDE_T << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HOR | 2 | (SIDE_N << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 2 | (SIDE_S << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 2 | (SIDE_W << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 2 | (SIDE_E << 4)):
|
||||
return iconSide;
|
||||
|
||||
case (SEC_HOR | 3 | (SIDE_B << 4)):
|
||||
return iconBottom;
|
||||
case (SEC_HOR | 3 | (SIDE_T << 4)):
|
||||
return iconTop;
|
||||
case (SEC_HOR | 3 | (SIDE_N << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 3 | (SIDE_S << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 3 | (SIDE_W << 4)):
|
||||
return iconSide;
|
||||
case (SEC_HOR | 3 | (SIDE_E << 4)):
|
||||
return iconSide;
|
||||
|
||||
case (SEC_DOWN | 0 | (SIDE_B << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 0 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_DOWN | 0 | (SIDE_N << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 0 | (SIDE_S << 4)):
|
||||
return iconRightTip;
|
||||
case (SEC_DOWN | 0 | (SIDE_W << 4)):
|
||||
return iconLeftDown;
|
||||
case (SEC_DOWN | 0 | (SIDE_E << 4)):
|
||||
return iconRightDown;
|
||||
|
||||
case (SEC_DOWN | 1 | (SIDE_B << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 1 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_DOWN | 1 | (SIDE_N << 4)):
|
||||
return iconLeftTip;
|
||||
case (SEC_DOWN | 1 | (SIDE_S << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 1 | (SIDE_W << 4)):
|
||||
return iconRightDown;
|
||||
case (SEC_DOWN | 1 | (SIDE_E << 4)):
|
||||
return iconLeftDown;
|
||||
|
||||
case (SEC_DOWN | 2 | (SIDE_B << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 2 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_DOWN | 2 | (SIDE_N << 4)):
|
||||
return iconRightDown;
|
||||
case (SEC_DOWN | 2 | (SIDE_S << 4)):
|
||||
return iconLeftDown;
|
||||
case (SEC_DOWN | 2 | (SIDE_W << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 2 | (SIDE_E << 4)):
|
||||
return iconLeftTip;
|
||||
|
||||
case (SEC_DOWN | 3 | (SIDE_B << 4)):
|
||||
return iconCross;
|
||||
case (SEC_DOWN | 3 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_DOWN | 3 | (SIDE_N << 4)):
|
||||
return iconLeftDown;
|
||||
case (SEC_DOWN | 3 | (SIDE_S << 4)):
|
||||
return iconRightDown;
|
||||
case (SEC_DOWN | 3 | (SIDE_W << 4)):
|
||||
return iconRightTip;
|
||||
case (SEC_DOWN | 3 | (SIDE_E << 4)):
|
||||
return iconCross;
|
||||
|
||||
case (SEC_UP | 0 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_UP | 0 | (SIDE_T << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 0 | (SIDE_N << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 0 | (SIDE_S << 4)):
|
||||
return iconLeftTip;
|
||||
case (SEC_UP | 0 | (SIDE_W << 4)):
|
||||
return iconLeftUp;
|
||||
case (SEC_UP | 0 | (SIDE_E << 4)):
|
||||
return iconRightUp;
|
||||
|
||||
case (SEC_UP | 1 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_UP | 1 | (SIDE_T << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 1 | (SIDE_N << 4)):
|
||||
return iconRightTip;
|
||||
case (SEC_UP | 1 | (SIDE_S << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 1 | (SIDE_W << 4)):
|
||||
return iconRightUp;
|
||||
case (SEC_UP | 1 | (SIDE_E << 4)):
|
||||
return iconLeftUp;
|
||||
|
||||
case (SEC_UP | 2 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_UP | 2 | (SIDE_T << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 2 | (SIDE_N << 4)):
|
||||
return iconRightUp;
|
||||
case (SEC_UP | 2 | (SIDE_S << 4)):
|
||||
return iconLeftUp;
|
||||
case (SEC_UP | 2 | (SIDE_W << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 2 | (SIDE_E << 4)):
|
||||
return iconRightTip;
|
||||
|
||||
case (SEC_UP | 3 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_UP | 3 | (SIDE_T << 4)):
|
||||
return iconCross;
|
||||
case (SEC_UP | 3 | (SIDE_N << 4)):
|
||||
return iconLeftUp;
|
||||
case (SEC_UP | 3 | (SIDE_S << 4)):
|
||||
return iconRightUp;
|
||||
case (SEC_UP | 3 | (SIDE_W << 4)):
|
||||
return iconLeftTip;
|
||||
case (SEC_UP | 3 | (SIDE_E << 4)):
|
||||
return iconCross;
|
||||
|
||||
case (SEC_HEAD | 0 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_HEAD | 0 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_HEAD | 0 | (SIDE_N << 4)):
|
||||
return iconFace;
|
||||
case (SEC_HEAD | 0 | (SIDE_S << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HEAD | 0 | (SIDE_W << 4)):
|
||||
return iconFaceLeft;
|
||||
case (SEC_HEAD | 0 | (SIDE_E << 4)):
|
||||
return iconFaceRight;
|
||||
|
||||
case (SEC_HEAD | 1 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_HEAD | 1 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_HEAD | 1 | (SIDE_N << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HEAD | 1 | (SIDE_S << 4)):
|
||||
return iconFace;
|
||||
case (SEC_HEAD | 1 | (SIDE_W << 4)):
|
||||
return iconFaceRight;
|
||||
case (SEC_HEAD | 1 | (SIDE_E << 4)):
|
||||
return iconFaceLeft;
|
||||
|
||||
case (SEC_HEAD | 2 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_HEAD | 2 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_HEAD | 2 | (SIDE_N << 4)):
|
||||
return iconFaceRight;
|
||||
case (SEC_HEAD | 2 | (SIDE_S << 4)):
|
||||
return iconFaceLeft;
|
||||
case (SEC_HEAD | 2 | (SIDE_W << 4)):
|
||||
return iconFace;
|
||||
case (SEC_HEAD | 2 | (SIDE_E << 4)):
|
||||
return iconCross;
|
||||
|
||||
case (SEC_HEAD | 3 | (SIDE_B << 4)):
|
||||
return iconBottomSide;
|
||||
case (SEC_HEAD | 3 | (SIDE_T << 4)):
|
||||
return iconTopTip;
|
||||
case (SEC_HEAD | 3 | (SIDE_N << 4)):
|
||||
return iconFaceLeft;
|
||||
case (SEC_HEAD | 3 | (SIDE_S << 4)):
|
||||
return iconFaceRight;
|
||||
case (SEC_HEAD | 3 | (SIDE_W << 4)):
|
||||
return iconCross;
|
||||
case (SEC_HEAD | 3 | (SIDE_E << 4)):
|
||||
return iconFace;
|
||||
|
||||
}
|
||||
|
||||
return iconCross;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item item, CreativeTabs tabs, List list)
|
||||
{
|
||||
list.add(new ItemStack(item, 1, 1));
|
||||
list.add(new ItemStack(item, 1, 13));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta)
|
||||
{
|
||||
if(meta < 4)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 13;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
iconFaceLeft = register.registerIcon(iconPrefix + "face-left");
|
||||
iconFaceRight = register.registerIcon(iconPrefix + "face-right");
|
||||
iconFace = register.registerIcon(iconPrefix + "face");
|
||||
|
||||
iconLeftUp = register.registerIcon(iconPrefix + "left-up");
|
||||
iconLeftDown = register.registerIcon(iconPrefix + "left-down");
|
||||
iconLeftTip = register.registerIcon(iconPrefix + "left-tip");
|
||||
|
||||
iconRightUp = register.registerIcon(iconPrefix + "right-up");
|
||||
iconRightDown = register.registerIcon(iconPrefix + "right-down");
|
||||
iconRightTip = register.registerIcon(iconPrefix + "right-tip");
|
||||
|
||||
iconTop = register.registerIcon(iconPrefix + "top");
|
||||
iconTopTip = register.registerIcon(iconPrefix + "top-tip");
|
||||
iconTopSide = register.registerIcon(iconPrefix + "top-side");
|
||||
|
||||
iconBottom = register.registerIcon(iconPrefix + "bot");
|
||||
iconBottomTip = register.registerIcon(iconPrefix + "bot-tip");
|
||||
iconBottomSide = register.registerIcon(iconPrefix + "bot-side");
|
||||
|
||||
iconCross = register.registerIcon(iconPrefix + "crosssection");
|
||||
iconSide = register.registerIcon(iconPrefix + "side");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockSnakestoneObsidian extends BlockSnakestone
|
||||
{
|
||||
public IIcon[] particles = new IIcon[8];
|
||||
|
||||
public BlockSnakestoneObsidian(String iconPrefix)
|
||||
{
|
||||
super(iconPrefix);
|
||||
|
||||
flipTopTextures = true;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void randomDisplayTick(World world, int x, int y, int z, Random random)
|
||||
{
|
||||
GeneralChiselClient.spawnSnakestoneObsidianFX(world, this, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
super.registerBlockIcons(register);
|
||||
|
||||
for(int i = 0; i < particles.length; i++)
|
||||
{
|
||||
particles[i] = register.registerIcon(iconPrefix + "particles/" + i);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import info.jbcs.minecraft.chisel.Configurations;
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockSpikesRenderer;
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockSpikes extends Block
|
||||
{
|
||||
public IIcon iconBase;
|
||||
public IIcon iconSpike;
|
||||
|
||||
public BlockSpikes(Material mat)
|
||||
{
|
||||
super(Material.circuits);
|
||||
|
||||
this.setCreativeTab(CreativeTabs.tabDecorations);
|
||||
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f / 16, 1.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
|
||||
{
|
||||
if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT)
|
||||
return;
|
||||
|
||||
double dy = entity.posY - entity.prevPosY;
|
||||
|
||||
GeneralChiselClient.speedupPlayer(world, entity, Configurations.concreteVelocity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockSpikesRenderer.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
blockIcon = iconBase = register.registerIcon(General.getName(this) + "base");
|
||||
iconSpike = register.registerIcon(General.getName(this) + "spike");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package info.jbcs.minecraft.chisel.block;
|
||||
|
||||
import info.jbcs.minecraft.chisel.client.render.BlockTexturedOreRenderer;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class BlockTexturedOre extends Block
|
||||
{
|
||||
public int currentPass;
|
||||
public Block base;
|
||||
public IIcon icon;
|
||||
String iconFile;
|
||||
|
||||
public BlockTexturedOre(Material mat, Block base)
|
||||
{
|
||||
super(mat);
|
||||
|
||||
this.base = base;
|
||||
}
|
||||
|
||||
public BlockTexturedOre(Material mat, String iconFile)
|
||||
{
|
||||
super(mat);
|
||||
|
||||
this.iconFile = iconFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType()
|
||||
{
|
||||
return BlockTexturedOreRenderer.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderBlockPass()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRenderInPass(int pass)
|
||||
{
|
||||
currentPass = pass;
|
||||
|
||||
return pass == 1 || pass == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockIcons(IIconRegister register)
|
||||
{
|
||||
if(iconFile != null)
|
||||
icon = register.registerIcon(iconFile);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package info.jbcs.minecraft.chisel.block.tile;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class TilePumpkin extends TileEntity
|
||||
{
|
||||
|
||||
public int pos;
|
||||
|
||||
public TilePumpkin()
|
||||
{
|
||||
pos = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbtTagCompound)
|
||||
{
|
||||
super.writeToNBT(nbtTagCompound);
|
||||
nbtTagCompound.setInteger("pos", pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbtTagCompound)
|
||||
{
|
||||
super.readFromNBT(nbtTagCompound);
|
||||
pos = nbtTagCompound.getInteger("pos");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
package info.jbcs.minecraft.chisel.block.tileentity;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class TileEntityAutoChisel extends TileEntity implements ISidedInventory{
|
||||
|
||||
private ItemStack[] inventory = new ItemStack[3];
|
||||
private String name = "autoChisel";
|
||||
|
||||
@Override
|
||||
public boolean canUpdate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack decrStackSize(int slot, int size) {
|
||||
if (inventory[slot] != null) {
|
||||
ItemStack is;
|
||||
if (inventory[slot].stackSize <= size) {
|
||||
is = inventory[slot];
|
||||
inventory[slot] = null;
|
||||
return is;
|
||||
} else {
|
||||
is = inventory[slot].splitStack(size);
|
||||
if (inventory[slot].stackSize == 0)
|
||||
inventory[slot] = null;
|
||||
return is;
|
||||
}
|
||||
} else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
NBTTagList tags = nbt.getTagList("Items", 10);
|
||||
inventory = new ItemStack[getSizeInventory()];
|
||||
|
||||
for (int i = 0; i < tags.tagCount(); i++) {
|
||||
NBTTagCompound data = tags.getCompoundTagAt(i);
|
||||
int j = data.getByte("Slot") & 255;
|
||||
|
||||
if (j >= 0 && j < inventory.length) {
|
||||
inventory[j] = ItemStack.loadItemStackFromNBT(data);
|
||||
}
|
||||
}
|
||||
|
||||
if (nbt.hasKey("CustomName", 8))
|
||||
{
|
||||
this.name = nbt.getString("CustomName");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
NBTTagList tags = new NBTTagList();
|
||||
|
||||
for (int i = 0; i < inventory.length; i++) {
|
||||
if (inventory[i] != null) {
|
||||
NBTTagCompound data = new NBTTagCompound();
|
||||
data.setByte("Slot", (byte) i);
|
||||
inventory[i].writeToNBT(data);
|
||||
tags.appendTag(data);
|
||||
}
|
||||
}
|
||||
|
||||
nbt.setTag("Items", tags);
|
||||
|
||||
if (this.hasCustomInventoryName())
|
||||
{
|
||||
nbt.setString("CustomName", this.name);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSizeInventory(){
|
||||
return inventory.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot){
|
||||
return inventory[slot];
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlotOnClosing(int slot) {
|
||||
if (inventory[slot] != null) {
|
||||
ItemStack is = inventory[slot];
|
||||
inventory[slot] = null;
|
||||
return is;
|
||||
} else
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInventorySlotContents(int slot, ItemStack stack){
|
||||
inventory[slot] = stack;
|
||||
|
||||
if(stack != null && stack.stackSize > getInventoryStackLimit()){
|
||||
stack.stackSize = getInventoryStackLimit();
|
||||
}
|
||||
markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInventoryName(){
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isUseableByPlayer(EntityPlayer player){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInventoryStackLimit(){
|
||||
return 64;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCustomInventoryName(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getAccessibleSlotsFromSide(int side){
|
||||
int[] slots = new int[getSizeInventory()];
|
||||
|
||||
for(int c = 0; c < slots.length; c++){
|
||||
slots[c] = c;
|
||||
}
|
||||
|
||||
if(side != 0){
|
||||
return slots;
|
||||
} else if(side == 0){
|
||||
return new int[] {2};
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int slot, ItemStack itemStack){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canInsertItem(int slot, ItemStack itemStack, int side){
|
||||
if(side != 0){
|
||||
if(slot == 0){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if(side == 0){
|
||||
if(slot == 2){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canExtractItem(int slot, ItemStack itemStack, int side){
|
||||
if(side != 0){
|
||||
if(slot == 1){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if(side == 0){
|
||||
if(slot == 2){
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openInventory(){}
|
||||
|
||||
@Override
|
||||
public void closeInventory(){
|
||||
NBTTagList tags = new NBTTagList();
|
||||
System.out.print(tags);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet getDescriptionPacket() {
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
writeToNBT(tag);
|
||||
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) {
|
||||
readFromNBT(packet.func_148857_g());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,444 @@
|
||||
package info.jbcs.minecraft.chisel.carving;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.Configurations;
|
||||
import info.jbcs.minecraft.chisel.block.BlockMarbleSlab;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation.CarvableVariationCTM;
|
||||
import info.jbcs.minecraft.chisel.client.render.CTM;
|
||||
import info.jbcs.minecraft.chisel.client.render.TextureSubmap;
|
||||
import info.jbcs.minecraft.chisel.item.ItemCarvable;
|
||||
import info.jbcs.minecraft.utilities.GeneralClient;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockPane;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class CarvableHelper
|
||||
{
|
||||
static final String modName = "chisel";
|
||||
public static final ArrayList<Block> chiselBlocks = new ArrayList<Block>();
|
||||
|
||||
public static final int NORMAL = 0;
|
||||
public static final int TOPSIDE = 1;
|
||||
public static final int TOPBOTSIDE = 2;
|
||||
public static final int CTM3 = 3;
|
||||
public static final int CTMV = 4;
|
||||
public static final int CTMH = 5;
|
||||
public static final int V9 = 6;
|
||||
public static final int V4 = 7;
|
||||
public static final int CTMX = 8;
|
||||
|
||||
|
||||
public CarvableHelper()
|
||||
{
|
||||
}
|
||||
|
||||
public ArrayList<CarvableVariation> variations = new ArrayList<CarvableVariation>();
|
||||
CarvableVariation[] map = new CarvableVariation[16];
|
||||
public boolean forbidChiseling = false;
|
||||
public String blockName;
|
||||
|
||||
public void addVariation(String description, int metadata, Block bb)
|
||||
{
|
||||
addVariation(description, metadata, null, bb, 0);
|
||||
}
|
||||
|
||||
public void addVariation(String description, int metadata, Block bb, int blockMeta)
|
||||
{
|
||||
addVariation(description, metadata, null, bb, blockMeta);
|
||||
}
|
||||
|
||||
public void addVariation(String description, int metadata, Block bb, int blockMeta, Material material)
|
||||
{
|
||||
addVariation(description, metadata, null, bb, blockMeta);
|
||||
}
|
||||
|
||||
public void addVariation(String description, int metadata, String texture)
|
||||
{
|
||||
addVariation(description, metadata, texture, null, 0);
|
||||
}
|
||||
|
||||
public void addVariation(String description, int metadata, String texture, Block block, int blockMeta)
|
||||
{
|
||||
if(variations.size() >= 16)
|
||||
return;
|
||||
|
||||
if(blockName == null && block != null)
|
||||
blockName = block.getLocalizedName();
|
||||
else if(blockName == null && description != null)
|
||||
blockName = description;
|
||||
|
||||
CarvableVariation variation = new CarvableVariation();
|
||||
variation.description = description;
|
||||
variation.metadata = metadata;
|
||||
variation.blockName = blockName;
|
||||
|
||||
if(texture != null)
|
||||
{
|
||||
variation.texture = texture;
|
||||
|
||||
String path = "/assets/" + modName + "/textures/blocks/" + variation.texture;
|
||||
|
||||
boolean any = Chisel.class.getResource(path + ".png") != null;
|
||||
boolean ctm3 = Chisel.class.getResource(path + "-ctm1.png") != null && Chisel.class.getResource(path + "-ctm2.png") != null && Chisel.class.getResource(path + "-ctm3.png") != null;
|
||||
boolean ctmv = Chisel.class.getResource(path + "-ctmv.png") != null;
|
||||
boolean ctmh = Chisel.class.getResource(path + "-ctmh.png") != null;
|
||||
boolean side = Chisel.class.getResource(path + "-side.png") != null;
|
||||
boolean top = Chisel.class.getResource(path + "-top.png") != null;
|
||||
boolean bot = Chisel.class.getResource(path + "-bottom.png") != null;
|
||||
boolean v9 = Chisel.class.getResource(path + "-v9.png") != null;
|
||||
boolean v4 = Chisel.class.getResource(path + "-v4.png") != null;
|
||||
boolean ctmx = Chisel.class.getResource(path + "-ctm.png") != null;
|
||||
|
||||
if(ctm3)
|
||||
{
|
||||
variation.kind = 3;
|
||||
} else if(ctmh && top)
|
||||
{
|
||||
variation.kind = 5;
|
||||
} else if(ctmv && top)
|
||||
{
|
||||
variation.kind = CTMV;
|
||||
} else if(bot && top && side)
|
||||
{
|
||||
variation.kind = 2;
|
||||
} else if(top && side)
|
||||
{
|
||||
variation.kind = 1;
|
||||
} else if(v9)
|
||||
{
|
||||
variation.kind = V9;
|
||||
} else if(v4)
|
||||
{
|
||||
variation.kind = V4;
|
||||
} else if(any && ctmx && !Configurations.disableCTM)
|
||||
{
|
||||
variation.kind = CTMX;
|
||||
} else if(any)
|
||||
{
|
||||
variation.kind = 0;
|
||||
} else
|
||||
{
|
||||
throw new RuntimeException("No valid textures found for chisel block variation '" + description + "' (" + variation.texture + ")");
|
||||
}
|
||||
} else
|
||||
{
|
||||
variation.block = block;
|
||||
variation.kind = 2;
|
||||
variation.blockMeta = blockMeta;
|
||||
}
|
||||
|
||||
variations.add(variation);
|
||||
map[metadata] = variation;
|
||||
}
|
||||
|
||||
public CarvableVariation getVariation(int metadata)
|
||||
{
|
||||
if(metadata < 0 || metadata > 15)
|
||||
metadata = 0;
|
||||
|
||||
CarvableVariation variation = map[metadata];
|
||||
if(variation == null)
|
||||
return null;
|
||||
|
||||
return variation;
|
||||
}
|
||||
|
||||
public IIcon getIcon(int side, int metadata)
|
||||
{
|
||||
if(metadata < 0 || metadata > 15)
|
||||
metadata = 0;
|
||||
|
||||
CarvableVariation variation = map[metadata];
|
||||
if(variation == null)
|
||||
return GeneralClient.getMissingIcon();
|
||||
|
||||
switch(variation.kind)
|
||||
{
|
||||
case 0:
|
||||
return variation.icon;
|
||||
case 1:
|
||||
if(side == 0 || side == 1)
|
||||
return variation.iconTop;
|
||||
else
|
||||
return variation.icon;
|
||||
case 2:
|
||||
if(side == 1)
|
||||
return variation.iconTop;
|
||||
else if(side == 0)
|
||||
return variation.iconBot;
|
||||
else
|
||||
return variation.icon;
|
||||
case 3:
|
||||
return variation.ctm.seams[0].icons[0];
|
||||
case 4:
|
||||
if(side < 2)
|
||||
return variation.iconTop;
|
||||
else
|
||||
return variation.seamsCtmVert.icons[0];
|
||||
case 5:
|
||||
if(side < 2)
|
||||
return variation.iconTop;
|
||||
else
|
||||
return variation.seamsCtmVert.icons[0];
|
||||
case V9:
|
||||
return variation.variations9.icons[4];
|
||||
case V4:
|
||||
return variation.variations9.icons[0];
|
||||
case CTMX:
|
||||
return variation.icon;
|
||||
}
|
||||
|
||||
return GeneralClient.getMissingIcon();
|
||||
}
|
||||
|
||||
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
int metadata = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if(metadata < 0 || metadata > 15)
|
||||
metadata = 0;
|
||||
|
||||
CarvableVariation variation = map[metadata];
|
||||
if(variation == null)
|
||||
return GeneralClient.getMissingIcon();
|
||||
|
||||
switch(variation.kind)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
return getIcon(side, metadata);
|
||||
case 3:
|
||||
int tex = CTM.getTexture(world, x, y, z, side);
|
||||
|
||||
int row = tex / 16;
|
||||
int col = tex % 16;
|
||||
|
||||
return variation.ctm.seams[col / 4].icons[col % 4 + row * 4];
|
||||
case 4:
|
||||
{
|
||||
if(side < 2)
|
||||
return variation.iconTop;
|
||||
|
||||
Block block = world.getBlock(x, y, z);
|
||||
boolean topConnected = block.equals(world.getBlock(x, y + 1, z)) && metadata == world.getBlockMetadata(x, y + 1, z);
|
||||
boolean botConnected = block.equals(world.getBlock(x, y - 1, z)) && metadata == world.getBlockMetadata(x, y - 1, z);
|
||||
|
||||
if(topConnected && botConnected) return variation.seamsCtmVert.icons[2];
|
||||
if(topConnected && !botConnected) return variation.seamsCtmVert.icons[3];
|
||||
if(!topConnected && botConnected) return variation.seamsCtmVert.icons[1];
|
||||
return variation.seamsCtmVert.icons[0];
|
||||
}
|
||||
case 5:
|
||||
if(side < 2)
|
||||
return variation.iconTop;
|
||||
|
||||
Block block = world.getBlock(x, y, z);
|
||||
|
||||
boolean p;
|
||||
boolean n;
|
||||
boolean reverse = side == 2 || side == 4;
|
||||
|
||||
if(side < 4)
|
||||
{
|
||||
p = isSame(world, x - 1, y, z, block, metadata);
|
||||
n = isSame(world, x + 1, y, z, block, metadata);
|
||||
} else
|
||||
{
|
||||
p = isSame(world, x, y, z + 1, block, metadata);
|
||||
n = isSame(world, x, y, z - 1, block, metadata);
|
||||
}
|
||||
|
||||
if(p && n) return variation.seamsCtmVert.icons[1];
|
||||
else if(p) return variation.seamsCtmVert.icons[reverse ? 2 : 3];
|
||||
else if(n) return variation.seamsCtmVert.icons[reverse ? 3 : 2];
|
||||
return variation.seamsCtmVert.icons[0];
|
||||
case V9:
|
||||
case V4:
|
||||
int index = x + y * 606731 + z * 571163 + side * 555491;
|
||||
if(index < 0) index = -index;
|
||||
|
||||
return variation.variations9.icons[index % ((variation.kind == V9) ? 9 : 4)];
|
||||
case CTMX:
|
||||
return variation.icon;
|
||||
}
|
||||
|
||||
return GeneralClient.getMissingIcon();
|
||||
}
|
||||
|
||||
public void register(Block block, String name)
|
||||
{
|
||||
register(block, name, ItemCarvable.class);
|
||||
}
|
||||
|
||||
public void registerBlock(Block block, String name)
|
||||
{
|
||||
registerBlock(block, name, ItemCarvable.class);
|
||||
}
|
||||
|
||||
void registerBlock(Block block, String name, Class cl)
|
||||
{
|
||||
block.setBlockName(name);
|
||||
GameRegistry.registerBlock(block, cl, name);
|
||||
chiselBlocks.add(block);
|
||||
}
|
||||
|
||||
public void register(Block block, String name, Class cl)
|
||||
{
|
||||
registerBlock(block, name, cl);
|
||||
|
||||
if(block instanceof BlockMarbleSlab)
|
||||
{
|
||||
BlockMarbleSlab slab = (BlockMarbleSlab) block;
|
||||
}
|
||||
|
||||
for(CarvableVariation variation : variations)
|
||||
{
|
||||
registerVariation(name, variation, block, variation.metadata);
|
||||
|
||||
if(block instanceof BlockMarbleSlab && ((BlockMarbleSlab) block).isBottom)
|
||||
{
|
||||
BlockMarbleSlab slab = (BlockMarbleSlab) block;
|
||||
slab.top.setHarvestLevel("chisel", 0, variation.metadata);
|
||||
|
||||
if(!forbidChiseling)
|
||||
{
|
||||
Carving.chisel.addVariation(name + ".top", slab.top, variation.metadata, 0);
|
||||
Carving.chisel.setGroupClass(name + ".top", name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void registerVariation(String name, CarvableVariation variation, Block block, int blockMeta)
|
||||
{
|
||||
//TODO Multipart registry goes here
|
||||
if(forbidChiseling)
|
||||
return;
|
||||
|
||||
if(variation.block == null)
|
||||
{
|
||||
Carving.chisel.addVariation(name, block, blockMeta, variation.metadata);
|
||||
block.setHarvestLevel("chisel", 0, blockMeta);
|
||||
} else
|
||||
{
|
||||
Carving.chisel.addVariation(name, variation.block, variation.blockMeta, variation.metadata);
|
||||
variation.block.setHarvestLevel("chisel", 0, variation.blockMeta);
|
||||
}
|
||||
}
|
||||
|
||||
public void registerBlockIcons(String modName, Block block, IIconRegister register)
|
||||
{
|
||||
for(CarvableVariation variation : variations)
|
||||
{
|
||||
if(variation.block != null)
|
||||
{
|
||||
variation.block.registerBlockIcons(register);
|
||||
|
||||
if(variation.block instanceof BlockPane)
|
||||
{
|
||||
variation.icon = variation.block.getBlockTextureFromSide(2);
|
||||
variation.iconTop = ((BlockPane) variation.block).getBlockTextureFromSide(0);
|
||||
variation.iconBot = ((BlockPane) variation.block).getBlockTextureFromSide(0);
|
||||
|
||||
} else
|
||||
{
|
||||
switch(variation.kind)
|
||||
{
|
||||
case 0:
|
||||
variation.icon = variation.block.getIcon(2, variation.blockMeta);
|
||||
break;
|
||||
case 1:
|
||||
variation.icon = variation.block.getIcon(2, variation.blockMeta);
|
||||
variation.iconTop = variation.block.getIcon(0, variation.blockMeta);
|
||||
break;
|
||||
case 2:
|
||||
variation.icon = variation.block.getIcon(2, variation.blockMeta);
|
||||
variation.iconTop = variation.block.getIcon(1, variation.blockMeta);
|
||||
variation.iconBot = variation.block.getIcon(0, variation.blockMeta);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
switch(variation.kind)
|
||||
{
|
||||
case 0:
|
||||
variation.icon = register.registerIcon(modName + ":" + variation.texture);
|
||||
break;
|
||||
case 1:
|
||||
variation.icon = register.registerIcon(modName + ":" + variation.texture + "-side");
|
||||
variation.iconTop = register.registerIcon(modName + ":" + variation.texture + "-top");
|
||||
break;
|
||||
case 2:
|
||||
variation.icon = register.registerIcon(modName + ":" + variation.texture + "-side");
|
||||
variation.iconTop = register.registerIcon(modName + ":" + variation.texture + "-top");
|
||||
variation.iconBot = register.registerIcon(modName + ":" + variation.texture + "-bottom");
|
||||
break;
|
||||
case 3:
|
||||
CarvableVariationCTM ctm = new CarvableVariationCTM();
|
||||
ctm.seams[0] = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctm1"), 4, 4);
|
||||
ctm.seams[1] = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctm2"), 4, 4);
|
||||
ctm.seams[2] = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctm3"), 4, 4);
|
||||
variation.ctm = ctm;
|
||||
break;
|
||||
case 4:
|
||||
variation.seamsCtmVert = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctmv"), 2, 2);
|
||||
variation.iconTop = register.registerIcon(modName + ":" + variation.texture + "-top");
|
||||
break;
|
||||
case 5:
|
||||
variation.seamsCtmVert = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctmh"), 2, 2);
|
||||
variation.iconTop = register.registerIcon(modName + ":" + variation.texture + "-top");
|
||||
break;
|
||||
case V9:
|
||||
variation.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-v9"), 3, 3);
|
||||
break;
|
||||
case V4:
|
||||
variation.variations9 = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-v4"), 2, 2);
|
||||
break;
|
||||
case CTMX:
|
||||
variation.icon = register.registerIcon(modName + ":" + variation.texture);
|
||||
variation.submap = new TextureSubmap(register.registerIcon(modName + ":" + variation.texture + "-ctm"), 4, 4);
|
||||
variation.submapSmall = new TextureSubmap(variation.icon, 2, 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void registerSubBlocks(Block block, CreativeTabs tabs, List list)
|
||||
{
|
||||
for(CarvableVariation variation : variations)
|
||||
{
|
||||
list.add(new ItemStack(block, 1, variation.metadata));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isSame(IBlockAccess world, int x, int y, int z, Block block, int meta)
|
||||
{
|
||||
return world.getBlock(x, y, z).equals(block) && world.getBlockMetadata(x, y, z) == meta;
|
||||
}
|
||||
|
||||
public void setChiselBlockName(String name)
|
||||
{
|
||||
blockName = name;
|
||||
}
|
||||
|
||||
public static Set<Block> getChiselBlockSet()
|
||||
{
|
||||
HashSet<Block> tools = new HashSet<Block>();
|
||||
tools.addAll(CarvableHelper.chiselBlocks);
|
||||
return tools;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package info.jbcs.minecraft.chisel.carving;
|
||||
|
||||
import info.jbcs.minecraft.chisel.client.render.TextureSubmap;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class CarvableVariation
|
||||
{
|
||||
public String blockName;
|
||||
public String description;
|
||||
public int metadata;
|
||||
public int kind;
|
||||
|
||||
public Block block;
|
||||
public int blockMeta;
|
||||
|
||||
public String texture;
|
||||
|
||||
public IIcon icon;
|
||||
public IIcon iconTop;
|
||||
public IIcon iconBot;
|
||||
|
||||
public CarvableVariationCTM ctm;
|
||||
public TextureSubmap seamsCtmVert;
|
||||
public TextureSubmap variations9;
|
||||
|
||||
public TextureSubmap submap;
|
||||
public TextureSubmap submapSmall;
|
||||
|
||||
static class CarvableVariationCTM
|
||||
{
|
||||
TextureSubmap seams[] = new TextureSubmap[3];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
package info.jbcs.minecraft.chisel.carving;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class Carving
|
||||
{
|
||||
HashMap<String, CarvingGroup> carvingGroupsByName = new HashMap<String, CarvingGroup>();
|
||||
HashMap<String, CarvingGroup> carvingGroupsByOre = new HashMap<String, CarvingGroup>();
|
||||
HashMap<String, CarvingGroup> carvingGroupsByVariation = new HashMap<String, CarvingGroup>();
|
||||
|
||||
public static Carving chisel = new Carving();
|
||||
public static Carving needle = new Carving();
|
||||
|
||||
String key(Item item, int metadata)
|
||||
{
|
||||
return Item.itemRegistry.getNameForObject(item) + "|" + metadata;
|
||||
}
|
||||
|
||||
String key(Block block, int metadata)
|
||||
{
|
||||
return Block.blockRegistry.getNameForObject(block) + "|" + metadata;
|
||||
}
|
||||
|
||||
public boolean isVariationOfSameClass(Block target, int metadata1, Block block2, int metadata2)
|
||||
{
|
||||
CarvingGroup group1 = carvingGroupsByVariation.get(key(target, metadata1));
|
||||
if(group1 == null) return false;
|
||||
|
||||
CarvingGroup group2 = carvingGroupsByVariation.get(key(block2, metadata2));
|
||||
if(group2 == null) return false;
|
||||
|
||||
return group1 == group2 || group1.className.equals(group2.className) && !group1.className.isEmpty();
|
||||
|
||||
}
|
||||
|
||||
public CarvingVariation[] getVariations(Block block, int metadata)
|
||||
{
|
||||
CarvingGroup group = getGroup(block, metadata);
|
||||
if(group == null) return null;
|
||||
|
||||
CarvingVariation[] res = group.variations.toArray(new CarvingVariation[group.variations.size()]);
|
||||
return res;
|
||||
}
|
||||
|
||||
public String getOre(Block block, int metadata)
|
||||
{
|
||||
CarvingGroup group = getGroup(block, metadata);
|
||||
if(group == null)
|
||||
return null;
|
||||
|
||||
return group.oreName;
|
||||
}
|
||||
|
||||
public ArrayList<ItemStack> getItems(ItemStack chiseledItem)
|
||||
{
|
||||
ArrayList<ItemStack> items = new ArrayList<ItemStack>();
|
||||
|
||||
int damage = chiseledItem.getItemDamage();
|
||||
|
||||
CarvingGroup group = getGroup(Block.getBlockFromItem(chiseledItem.getItem()), damage);
|
||||
if(group == null)
|
||||
return items;
|
||||
|
||||
HashMap<String, Integer> mapping = new HashMap<String, Integer>();
|
||||
|
||||
if(group.variations != null)
|
||||
{
|
||||
for(CarvingVariation v : group.variations)
|
||||
{
|
||||
|
||||
String key = Block.getIdFromBlock(v.block) + "|" + v.damage;
|
||||
if(mapping.containsKey(key)) continue;
|
||||
mapping.put(key, 1);
|
||||
|
||||
items.add(new ItemStack(v.block, 1, v.damage));
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<ItemStack> ores;
|
||||
if(group.oreName != null && ((ores = OreDictionary.getOres(group.oreName)) != null))
|
||||
{
|
||||
for(ItemStack stack : ores)
|
||||
{
|
||||
|
||||
String key = Item.getIdFromItem(stack.getItem()) + "|" + stack.getItemDamage();
|
||||
if(mapping.containsKey(key)) continue;
|
||||
mapping.put(key, 2);
|
||||
|
||||
items.add(stack);
|
||||
}
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
public CarvingGroup getGroup(Block block, int metadata)
|
||||
{
|
||||
if(block.equals(Blocks.stone))
|
||||
block = Blocks.stonebrick;
|
||||
|
||||
// Check name first
|
||||
CarvingGroup res;
|
||||
int i = OreDictionary.getOreID(block.getUnlocalizedName());
|
||||
if(i < 1)
|
||||
return null;
|
||||
|
||||
//if((res = carvingGroupsByOre.get(OreDictionary.getOreIDs(new ItemStack(block, 1, metadata)))) != null)
|
||||
// return res;
|
||||
|
||||
if((res = carvingGroupsByVariation.get(key(block, metadata))) != null)
|
||||
return res;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
CarvingGroup getGroup(String name)
|
||||
{
|
||||
CarvingGroup group = carvingGroupsByName.get(name);
|
||||
if(group == null)
|
||||
{
|
||||
group = new CarvingGroup(name);
|
||||
group.className = name;
|
||||
carvingGroupsByName.put(name, group);
|
||||
}
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
public CarvingVariation addVariation(String name, Block block, int metadata, int order)
|
||||
{
|
||||
CarvingGroup group = getGroup(name);
|
||||
|
||||
CarvingGroup blockGroup = carvingGroupsByVariation.get(key(block, metadata));
|
||||
if(blockGroup != null || blockGroup == group)
|
||||
return null;
|
||||
|
||||
CarvingVariation variation = new CarvingVariation(block, metadata, order);
|
||||
group.variations.add(variation);
|
||||
Collections.sort(group.variations);
|
||||
carvingGroupsByVariation.put(key(block, metadata), group);
|
||||
|
||||
return variation;
|
||||
}
|
||||
|
||||
|
||||
public void registerOre(String name, String oreName)
|
||||
{
|
||||
CarvingGroup group = getGroup(name);
|
||||
|
||||
carvingGroupsByOre.put(oreName, group);
|
||||
|
||||
group.oreName = oreName;
|
||||
}
|
||||
|
||||
public void setGroupClass(String name, String className)
|
||||
{
|
||||
CarvingGroup group = getGroup(name);
|
||||
|
||||
group.className = className;
|
||||
}
|
||||
|
||||
public void setVariationSound(String name, String sound)
|
||||
{
|
||||
CarvingGroup group = getGroup(name);
|
||||
group.sound = sound;
|
||||
}
|
||||
|
||||
public String getVariationSound(Block block, int metadata)
|
||||
{
|
||||
return getVariationSound(Item.getItemFromBlock(block), metadata);
|
||||
}
|
||||
|
||||
public String getVariationSound(Item item, int metadata)
|
||||
{
|
||||
CarvingGroup blockGroup = carvingGroupsByVariation.get(key(item, metadata));
|
||||
if(blockGroup == null || blockGroup.sound == null)
|
||||
return Chisel.MOD_ID+":chisel.fallback";
|
||||
|
||||
return blockGroup.sound;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package info.jbcs.minecraft.chisel.carving;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class CarvingGroup
|
||||
{
|
||||
public CarvingGroup(String n)
|
||||
{
|
||||
name = n;
|
||||
}
|
||||
|
||||
String name;
|
||||
String className;
|
||||
String sound;
|
||||
String oreName;
|
||||
|
||||
ArrayList<CarvingVariation> variations = new ArrayList<CarvingVariation>();
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package info.jbcs.minecraft.chisel.carving;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public class CarvingVariation implements Comparable
|
||||
{
|
||||
public CarvingVariation(Block block, int metadata, int ord)
|
||||
{
|
||||
this.order = ord;
|
||||
this.block = block;
|
||||
this.meta = metadata;
|
||||
this.damage = metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Object a)
|
||||
{
|
||||
return order - ((CarvingVariation) a).order;
|
||||
}
|
||||
|
||||
public int order;
|
||||
public Block block;
|
||||
public int meta;
|
||||
public int damage;
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
package info.jbcs.minecraft.chisel.client;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Configurations;
|
||||
import info.jbcs.minecraft.chisel.block.BlockHolystone;
|
||||
import info.jbcs.minecraft.chisel.block.BlockLavastone;
|
||||
import info.jbcs.minecraft.chisel.block.BlockSnakestoneObsidian;
|
||||
import info.jbcs.minecraft.chisel.entity.EntityBallOMossFX;
|
||||
import info.jbcs.minecraft.chisel.entity.EntityHolystoneFX;
|
||||
import info.jbcs.minecraft.chisel.entity.EntitySnakestoneObsidianFX;
|
||||
import info.jbcs.minecraft.utilities.GeneralClient;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.particle.EffectRenderer;
|
||||
import net.minecraft.client.particle.EntityDiggingFX;
|
||||
import net.minecraft.client.particle.EntityLavaFX;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
|
||||
public class GeneralChiselClient
|
||||
{
|
||||
public static Random rand = new Random();
|
||||
public static int tick = 0;
|
||||
|
||||
public static void spawnLavastoneFX(World world, BlockLavastone block, int x, int y, int z)
|
||||
{
|
||||
if(Configurations.particlesTickrate != 0 && tick++ % Configurations.particlesTickrate != 0) return;
|
||||
|
||||
float f = 0.15F;
|
||||
double x1 = x + rand.nextDouble() * (block.getBlockBoundsMaxX() - block.getBlockBoundsMinX() - f * 2.0F) + f + block.getBlockBoundsMinX();
|
||||
double y1 = y + rand.nextDouble() * (block.getBlockBoundsMaxY() - block.getBlockBoundsMinY() - f * 2.0F) + f + block.getBlockBoundsMinY();
|
||||
double z1 = z + rand.nextDouble() * (block.getBlockBoundsMaxZ() - block.getBlockBoundsMinZ() - f * 2.0F) + f + block.getBlockBoundsMinZ();
|
||||
|
||||
switch(rand.nextInt(6))
|
||||
{
|
||||
case 0:
|
||||
y1 = y + block.getBlockBoundsMinY() - f;
|
||||
y--;
|
||||
break;
|
||||
case 1:
|
||||
y1 = y + block.getBlockBoundsMaxY() + f;
|
||||
y++;
|
||||
break;
|
||||
case 2:
|
||||
z1 = z + block.getBlockBoundsMinZ() - f;
|
||||
z--;
|
||||
break;
|
||||
case 3:
|
||||
z1 = z + block.getBlockBoundsMaxZ() + f;
|
||||
z++;
|
||||
break;
|
||||
case 4:
|
||||
x1 = x + block.getBlockBoundsMinX() - f;
|
||||
x--;
|
||||
break;
|
||||
case 5:
|
||||
x1 = x + block.getBlockBoundsMaxX() + f;
|
||||
x++;
|
||||
break;
|
||||
}
|
||||
|
||||
if(world.getBlock(x, y, z).isOpaqueCube()) return;
|
||||
|
||||
EntityLavaFX res = new EntityLavaFX(world, x1, y1, z1);
|
||||
// res.motionX=x1-x-0.5;
|
||||
// res.motionY=y1-y-0.5;
|
||||
// res.motionZ=z1-z-0.5;
|
||||
double multiplier = 0.45;
|
||||
res.motionX = -multiplier * (x1 - x - 0.5);
|
||||
res.motionY = multiplier * (y1 - y - 0.5);
|
||||
res.motionZ = -multiplier * (z1 - z - 0.5);
|
||||
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(res);
|
||||
}
|
||||
|
||||
public static void spawnHolystoneFX(World world, BlockHolystone block, int x, int y, int z)
|
||||
{
|
||||
if(Configurations.particlesTickrate != 0 && tick++ % Configurations.particlesTickrate != 0) return;
|
||||
|
||||
float f = 0.15F;
|
||||
double x1 = x + rand.nextDouble() * (block.getBlockBoundsMaxX() - block.getBlockBoundsMinX() - f * 2.0F) + f + block.getBlockBoundsMinX();
|
||||
double y1 = y + rand.nextDouble() * (block.getBlockBoundsMaxY() - block.getBlockBoundsMinY() - f * 2.0F) + f + block.getBlockBoundsMinY();
|
||||
double z1 = z + rand.nextDouble() * (block.getBlockBoundsMaxZ() - block.getBlockBoundsMinZ() - f * 2.0F) + f + block.getBlockBoundsMinZ();
|
||||
|
||||
switch(rand.nextInt(6))
|
||||
{
|
||||
case 0:
|
||||
y1 = y + block.getBlockBoundsMinY() - f;
|
||||
y--;
|
||||
break;
|
||||
case 1:
|
||||
y1 = y + block.getBlockBoundsMaxY() + f;
|
||||
y++;
|
||||
break;
|
||||
case 2:
|
||||
z1 = z + block.getBlockBoundsMinZ() - f;
|
||||
z--;
|
||||
break;
|
||||
case 3:
|
||||
z1 = z + block.getBlockBoundsMaxZ() + f;
|
||||
z++;
|
||||
break;
|
||||
case 4:
|
||||
x1 = x + block.getBlockBoundsMinX() - f;
|
||||
x--;
|
||||
break;
|
||||
case 5:
|
||||
x1 = x + block.getBlockBoundsMaxX() + f;
|
||||
x++;
|
||||
break;
|
||||
}
|
||||
|
||||
if(world.getBlock(x, y, z).isOpaqueCube()) return;
|
||||
|
||||
EntityHolystoneFX res = new EntityHolystoneFX(world, block, x1, y1, z1);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(res);
|
||||
}
|
||||
|
||||
public static void spawnSnakestoneObsidianFX(World world, BlockSnakestoneObsidian block, int x, int y, int z)
|
||||
{
|
||||
if(Configurations.particlesTickrate == 0 || tick++ % Configurations.particlesTickrate == 0)
|
||||
{
|
||||
EntitySnakestoneObsidianFX res = new EntitySnakestoneObsidianFX(world, block, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(res);
|
||||
}
|
||||
}
|
||||
|
||||
public static void spawnBallOMossFX(World world, double x, double y, double z)
|
||||
{
|
||||
if(Configurations.particlesTickrate == 0 || tick++ % Configurations.particlesTickrate == 0)
|
||||
{
|
||||
EntityBallOMossFX res = new EntityBallOMossFX(world, x, y, z);
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(res);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static EntityDiggingFX addBlockHitEffects(World world, int x, int y, int z, int side)
|
||||
{
|
||||
Block block = world.getBlock(x, y, z);
|
||||
if(block.isAir(world, x, y, z))
|
||||
return null;
|
||||
|
||||
EffectRenderer renderer = Minecraft.getMinecraft().effectRenderer;
|
||||
|
||||
float f = 0.1F;
|
||||
double d0 = x + rand.nextDouble() * (block.getBlockBoundsMaxX() - block.getBlockBoundsMinX() - f * 2.0F) + f + block.getBlockBoundsMinX();
|
||||
double d1 = y + rand.nextDouble() * (block.getBlockBoundsMaxY() - block.getBlockBoundsMinY() - f * 2.0F) + f + block.getBlockBoundsMinY();
|
||||
double d2 = z + rand.nextDouble() * (block.getBlockBoundsMaxZ() - block.getBlockBoundsMinZ() - f * 2.0F) + f + block.getBlockBoundsMinZ();
|
||||
|
||||
switch(side)
|
||||
{
|
||||
case 0:
|
||||
d1 = y + block.getBlockBoundsMinY() - f;
|
||||
break;
|
||||
case 1:
|
||||
d1 = y + block.getBlockBoundsMaxY() + f;
|
||||
break;
|
||||
case 2:
|
||||
d2 = z + block.getBlockBoundsMinZ() - f;
|
||||
break;
|
||||
case 3:
|
||||
d2 = z + block.getBlockBoundsMaxZ() + f;
|
||||
break;
|
||||
case 4:
|
||||
d0 = x + block.getBlockBoundsMinX() - f;
|
||||
break;
|
||||
case 5:
|
||||
d0 = x + block.getBlockBoundsMaxX() + f;
|
||||
break;
|
||||
}
|
||||
|
||||
EntityDiggingFX res = new EntityDiggingFX(world, d0, d1, d2, 0.0D, 0.0D, 0.0D, block, world.getBlockMetadata(x, y, z), side);
|
||||
// res.func_70596_a(x, y, z);
|
||||
res.motionX = d0 - (x + 0.5);
|
||||
res.motionY = d1 - (y + 0.5);
|
||||
res.motionZ = d2 - (z + 0.5);
|
||||
|
||||
renderer.addEffect(res);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public static void spawnChiselEffect(int x, int y, int z, String sound)
|
||||
{
|
||||
World world = Minecraft.getMinecraft().theWorld;
|
||||
for(int side = 0; side < 6; side++)
|
||||
{
|
||||
for(int j = 0; j < 16; j++)
|
||||
{
|
||||
EntityDiggingFX fx = addBlockHitEffects(Minecraft.getMinecraft().theWorld, x, y, z, side);
|
||||
if(fx == null) return;
|
||||
|
||||
fx.multipleParticleScaleBy(0.25f + 0.5f * rand.nextFloat());
|
||||
fx.multiplyVelocity(0.3f * rand.nextFloat());
|
||||
}
|
||||
}
|
||||
|
||||
GeneralClient.playChiselSound(world, x, y, z, sound);
|
||||
}
|
||||
|
||||
public static void speedupPlayer(World world, Entity entity, double concreteVelocity)
|
||||
{
|
||||
double velocity = Math.sqrt(entity.motionX * entity.motionX + entity.motionZ * entity.motionZ);
|
||||
|
||||
if(!(entity instanceof EntityPlayerSP)) return;
|
||||
if(velocity == 0) return;
|
||||
if(velocity >= Configurations.concreteVelocity) return;
|
||||
|
||||
EntityPlayerSP player = (EntityPlayerSP) entity;
|
||||
|
||||
if(Math.abs(player.movementInput.moveForward) < 0.75f && Math.abs(player.movementInput.moveStrafe) < 0.75f)
|
||||
return;
|
||||
|
||||
entity.motionX = Configurations.concreteVelocity * entity.motionX / velocity;
|
||||
entity.motionZ = Configurations.concreteVelocity * entity.motionZ / velocity;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.tileentity.TileEntityAutoChisel;
|
||||
import info.jbcs.minecraft.chisel.inventory.ContainerAutoChisel;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiAutoChisel extends GuiContainer {
|
||||
|
||||
private static final ResourceLocation gui = new ResourceLocation("chisel:textures/autochisel-gui.png");
|
||||
|
||||
public GuiAutoChisel(InventoryPlayer inventoryPlayer, TileEntityAutoChisel tileEntityAutoChisel){
|
||||
super(new ContainerAutoChisel(inventoryPlayer, tileEntityAutoChisel));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3){
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
this.mc.renderEngine.bindTexture(gui);
|
||||
int x = (width - xSize) / 2;
|
||||
int y = (height - ySize) / 2;
|
||||
this.drawTexturedModalRect(x ,y, 0, 0, xSize, ySize);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import info.jbcs.minecraft.chisel.inventory.ContainerChisel;
|
||||
import info.jbcs.minecraft.chisel.inventory.InventoryChiselSelection;
|
||||
import info.jbcs.minecraft.utilities.GeneralClient;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiChisel extends GuiContainer
|
||||
{
|
||||
public EntityPlayer player;
|
||||
public ContainerChisel container;
|
||||
|
||||
public GuiChisel(InventoryPlayer iinventory, InventoryChiselSelection menu)
|
||||
{
|
||||
super(new ContainerChisel(iinventory, menu));
|
||||
player = iinventory.player;
|
||||
height = 177;
|
||||
|
||||
container = (ContainerChisel) inventorySlots;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuiClosed()
|
||||
{
|
||||
super.onGuiClosed();
|
||||
inventorySlots.onContainerClosed(player);
|
||||
}
|
||||
|
||||
boolean isExtended()
|
||||
{
|
||||
return container.inventory.activeVariations > 16;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int j, int i)
|
||||
{
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
String line = isExtended() ?
|
||||
I18n.format(this.container.inventory.getInventoryName() + ".titleShort") :
|
||||
I18n.format(this.container.inventory.getInventoryName() + ".title");
|
||||
fontRendererObj.drawString(line, 88 - fontRendererObj.getStringWidth(line) / 2, 13, 0x404040);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float f, int mx, int my)
|
||||
{
|
||||
drawDefaultBackground();
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
int i = width - xSize >> 1;
|
||||
int j = height - ySize >> 1;
|
||||
|
||||
String texture = isExtended() ?
|
||||
"chisel:textures/chisel-gui-24.png" :
|
||||
"chisel:textures/chisel-gui.png";
|
||||
|
||||
GeneralClient.bind(texture);
|
||||
drawTexturedModalRect(i, j, 0, 0, xSize, ySize);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import cpw.mods.fml.client.config.GuiConfig;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.Configurations;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraftforge.common.config.ConfigElement;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
|
||||
public class GuiChiselConfig extends GuiConfig
|
||||
{
|
||||
|
||||
public GuiChiselConfig(GuiScreen parent)
|
||||
{
|
||||
super(parent, new ConfigElement(Configurations.config.getCategory(Configuration.CATEGORY_GENERAL)).getChildElements(), Chisel.MOD_ID, false, false, GuiConfig.getAbridgedConfigPath(Configurations.config.toString()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
|
||||
public class GuiEdit extends GuiElement
|
||||
{
|
||||
GuiTextField field;
|
||||
String tempString = "";
|
||||
|
||||
public GuiEdit(int x, int y, int w, int h)
|
||||
{
|
||||
super(x, y, w, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdded()
|
||||
{
|
||||
field = new GuiTextField(gui.fontRendererObj(), x, y, w, h);
|
||||
setText(tempString);
|
||||
}
|
||||
|
||||
public String getText()
|
||||
{
|
||||
if(field == null)
|
||||
{
|
||||
return tempString;
|
||||
} else
|
||||
{
|
||||
return field.getText();
|
||||
}
|
||||
}
|
||||
|
||||
public void setText(String text)
|
||||
{
|
||||
if(field == null)
|
||||
{
|
||||
tempString = text;
|
||||
} else
|
||||
{
|
||||
field.setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render()
|
||||
{
|
||||
field.drawTextBox();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDown(InputMouseEvent ev)
|
||||
{
|
||||
field.mouseClicked(ev.x, ev.y, ev.button);
|
||||
|
||||
if(isMouseOver(ev))
|
||||
{
|
||||
ev.handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(InputKeyboardEvent ev)
|
||||
{
|
||||
field.textboxKeyTyped(ev.character, ev.key);
|
||||
|
||||
if(field.isFocused())
|
||||
{
|
||||
ev.handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiElement
|
||||
{
|
||||
public int x;
|
||||
public int y;
|
||||
public int w;
|
||||
public int h;
|
||||
|
||||
public GuiScreenPlus gui;
|
||||
public GuiElement parent, addedParent;
|
||||
private ArrayList<GuiElement> children = null;
|
||||
|
||||
public GuiElement(int x, int y, int w, int h)
|
||||
{
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.w = w;
|
||||
this.h = h;
|
||||
}
|
||||
|
||||
public GuiElement addChild(GuiElement e)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
children = new ArrayList<GuiElement>();
|
||||
}
|
||||
|
||||
if(e.parent != null)
|
||||
{
|
||||
e.parent.removeChild(e);
|
||||
}
|
||||
|
||||
children.add(e);
|
||||
e.x += x;
|
||||
e.y += y;
|
||||
e.parent = this;
|
||||
e.gui = gui;
|
||||
return e;
|
||||
}
|
||||
|
||||
public GuiElement removeChild(GuiElement e)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return e;
|
||||
}
|
||||
|
||||
children.remove(e);
|
||||
e.x -= x;
|
||||
e.y -= y;
|
||||
e.parent = null;
|
||||
e.gui = null;
|
||||
return e;
|
||||
}
|
||||
|
||||
public void onAdded()
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
if(e.parent != e.addedParent)
|
||||
{
|
||||
e.onAdded();
|
||||
}
|
||||
|
||||
e.addedParent = e.parent;
|
||||
}
|
||||
}
|
||||
|
||||
boolean isMouseOver(InputMouseEvent ev)
|
||||
{
|
||||
return ev.x >= x && ev.x < x + w && ev.y >= y && ev.y < y + h;
|
||||
}
|
||||
|
||||
public void mouseDown(InputMouseEvent ev)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
e.mouseDown(ev);
|
||||
|
||||
if(ev.handled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void mouseUp(InputMouseEvent ev)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
e.mouseUp(ev);
|
||||
|
||||
if(ev.handled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void mouseMove(InputMouseEvent ev)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
e.mouseMove(ev);
|
||||
|
||||
if(ev.handled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void mouseWheel(InputMouseEvent ev)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
e.mouseWheel(ev);
|
||||
|
||||
if(ev.handled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void render()
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
e.render();
|
||||
}
|
||||
}
|
||||
|
||||
public void keyPressed(InputKeyboardEvent ev)
|
||||
{
|
||||
if(children == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(GuiElement e : children)
|
||||
{
|
||||
e.keyPressed(ev);
|
||||
|
||||
if(ev.handled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
public class GuiExButton extends GuiElement
|
||||
{
|
||||
protected String caption;
|
||||
|
||||
int u, v, texw, texh;
|
||||
int borderTop, borderRight, borderBottom, borderLeft;
|
||||
|
||||
boolean over;
|
||||
public boolean disabled;
|
||||
|
||||
public TexturedBox boxDisabled;
|
||||
public TexturedBox boxNormal;
|
||||
public TexturedBox boxOver;
|
||||
|
||||
public GuiExButton(int x, int y, int w, int h, String caption)
|
||||
{
|
||||
this(x, y, w, h, caption, "textures/gui/widgets.png");
|
||||
}
|
||||
|
||||
public GuiExButton(int x, int y, int w, int h, String caption, String texture)
|
||||
{
|
||||
super(x, y, w, h);
|
||||
this.caption = caption;
|
||||
disabled = false;
|
||||
u = 0;
|
||||
v = 46;
|
||||
texw = 200;
|
||||
texh = 20;
|
||||
borderTop = 2;
|
||||
borderRight = 2;
|
||||
borderBottom = 3;
|
||||
borderLeft = 2;
|
||||
|
||||
boxDisabled = new TexturedBox(texture, 0, 46, 200, 20, 2, 2, 3, 2);
|
||||
boxNormal = new TexturedBox(texture, 0, 66, 200, 20, 2, 2, 3, 2);
|
||||
boxOver = new TexturedBox(texture, 0, 86, 200, 20, 2, 2, 3, 2);
|
||||
|
||||
}
|
||||
|
||||
public void onClick()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render()
|
||||
{
|
||||
int color = 0xffe0e0e0;
|
||||
TexturedBox box = boxDisabled;
|
||||
|
||||
if(!disabled && !over)
|
||||
{
|
||||
box = boxNormal;
|
||||
color = 0xffffffff;
|
||||
} else if(!disabled && over)
|
||||
{
|
||||
box = boxOver;
|
||||
color = 0xffffff70;
|
||||
}
|
||||
|
||||
box.render(gui, x, y, w, h);
|
||||
gui.drawCenteredStringWithShadow(caption, x + w / 2, y + h / 2, color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMove(InputMouseEvent ev)
|
||||
{
|
||||
over = isMouseOver(ev);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDown(InputMouseEvent ev)
|
||||
{
|
||||
if(!isMouseOver(ev))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gui.playSound("random.click", 1.0f, 1.0f);
|
||||
onClick();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import cpw.mods.fml.client.IModGuiFactory;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class GuiFactory implements IModGuiFactory
|
||||
{
|
||||
@Override
|
||||
public void initialize(Minecraft minecraftInstance)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends GuiScreen> mainConfigGuiClass()
|
||||
{
|
||||
return GuiChiselConfig.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<RuntimeOptionCategoryElement> runtimeGuiCategories()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
public class GuiLabel extends GuiElement
|
||||
{
|
||||
String caption;
|
||||
|
||||
public GuiLabel(int x, int y, int w, int h, String caption)
|
||||
{
|
||||
super(x, y, w, h);
|
||||
this.caption = caption;
|
||||
}
|
||||
|
||||
public GuiLabel(int x, int y, String string)
|
||||
{
|
||||
this(x, y, 0, 0, string);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render()
|
||||
{
|
||||
gui.drawString(caption, x, y, 0x404040);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,273 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import info.jbcs.minecraft.utilities.DummyContainer;
|
||||
import info.jbcs.minecraft.utilities.GeneralClient;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.inventory.Container;
|
||||
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuiScreenPlus extends GuiContainer
|
||||
{
|
||||
public int screenW;
|
||||
public int screenH;
|
||||
public int screenX;
|
||||
public int screenY;
|
||||
|
||||
public GuiElement root;
|
||||
|
||||
String backgroundTexture;
|
||||
|
||||
public GuiScreenPlus(Container container, int w, int h, String backgroundTexture)
|
||||
{
|
||||
super(container);
|
||||
root = new GuiElement(0, 0, w, h);
|
||||
root.gui = this;
|
||||
this.screenW = w;
|
||||
this.screenH = h;
|
||||
this.backgroundTexture = backgroundTexture;
|
||||
}
|
||||
|
||||
public GuiScreenPlus(int w, int h, String backgroundTexture)
|
||||
{
|
||||
this(new DummyContainer(), w, h, backgroundTexture);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui()
|
||||
{
|
||||
xSize = screenW;
|
||||
ySize = screenH;
|
||||
super.initGui();
|
||||
screenX = guiLeft;
|
||||
screenY = guiTop;
|
||||
root.onAdded();
|
||||
|
||||
Keyboard.enableRepeatEvents(true);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleInput()
|
||||
{
|
||||
while(Mouse.next())
|
||||
{
|
||||
this.handleMouseInput();
|
||||
}
|
||||
|
||||
while(Keyboard.next())
|
||||
{
|
||||
this.handleKeyboardInput();
|
||||
}
|
||||
}
|
||||
|
||||
InputMouseEvent mouseEvent = new InputMouseEvent();
|
||||
int oldX = -1;
|
||||
int oldY = -1;
|
||||
|
||||
boolean[] downButtons = new boolean[12];
|
||||
|
||||
@Override
|
||||
public void handleMouseInput()
|
||||
{
|
||||
mouseEvent.handled = false;
|
||||
mouseEvent.x = Mouse.getEventX() * width / mc.displayWidth - this.screenX;
|
||||
mouseEvent.y = height - Mouse.getEventY() * height / mc.displayHeight - 1 - this.screenY;
|
||||
|
||||
if(oldX == -1)
|
||||
{
|
||||
oldX = mouseEvent.x;
|
||||
oldY = mouseEvent.y;
|
||||
}
|
||||
|
||||
mouseEvent.dx = mouseEvent.x - oldX;
|
||||
mouseEvent.dy = mouseEvent.y - oldY;
|
||||
oldX = mouseEvent.x;
|
||||
oldY = mouseEvent.y;
|
||||
mouseEvent.down = Mouse.getEventButtonState();
|
||||
mouseEvent.button = Mouse.getEventButton();
|
||||
mouseEvent.wheel = Mouse.getEventDWheel();
|
||||
|
||||
if(mouseEvent.wheel != 0)
|
||||
{
|
||||
if(mouseEvent.wheel < 0)
|
||||
{
|
||||
mouseEvent.wheel = -1;
|
||||
} else
|
||||
{
|
||||
mouseEvent.wheel = 1;
|
||||
}
|
||||
|
||||
root.mouseWheel(mouseEvent);
|
||||
} else if(mouseEvent.button >= 0 && mouseEvent.button < downButtons.length)
|
||||
{
|
||||
if(downButtons[mouseEvent.button] != mouseEvent.down)
|
||||
{
|
||||
downButtons[mouseEvent.button] = mouseEvent.down;
|
||||
|
||||
if(mouseEvent.down)
|
||||
{
|
||||
root.mouseDown(mouseEvent);
|
||||
} else
|
||||
{
|
||||
root.mouseUp(mouseEvent);
|
||||
}
|
||||
} else if(mouseEvent.dx != 0 || mouseEvent.dy != 0)
|
||||
{
|
||||
root.mouseMove(mouseEvent);
|
||||
}
|
||||
} else if(mouseEvent.dx != 0 || mouseEvent.dy != 0)
|
||||
{
|
||||
root.mouseMove(mouseEvent);
|
||||
}
|
||||
|
||||
if(!mouseEvent.handled)
|
||||
{
|
||||
super.handleMouseInput();
|
||||
}
|
||||
}
|
||||
|
||||
InputKeyboardEvent keyboardEvent = new InputKeyboardEvent();
|
||||
|
||||
@Override
|
||||
public void handleKeyboardInput()
|
||||
{
|
||||
keyboardEvent.handled = false;
|
||||
|
||||
if(Keyboard.getEventKeyState())
|
||||
{
|
||||
keyboardEvent.key = Keyboard.getEventKey();
|
||||
keyboardEvent.character = Keyboard.getEventCharacter();
|
||||
|
||||
switch(keyboardEvent.key)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
|
||||
default:
|
||||
root.keyPressed(keyboardEvent);
|
||||
}
|
||||
}
|
||||
|
||||
if(!keyboardEvent.handled)
|
||||
{
|
||||
super.handleKeyboardInput();
|
||||
}
|
||||
}
|
||||
|
||||
public void close()
|
||||
{
|
||||
mc.displayGuiScreen((GuiScreen) null);
|
||||
mc.setIngameFocus();
|
||||
}
|
||||
|
||||
protected void addChild(GuiElement e)
|
||||
{
|
||||
root.addChild(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerBackgroundLayer(float f, int bx, int by)
|
||||
{
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GeneralClient.bind(backgroundTexture);
|
||||
drawTexturedModalRect(screenX, screenY, 0, 0, screenW, screenH);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawGuiContainerForegroundLayer(int fx, int fy)
|
||||
{
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
root.render();
|
||||
}
|
||||
|
||||
public void drawString(String text, int sx, int sy, int color)
|
||||
{
|
||||
fontRendererObj.drawString(text, sx, sy, color);
|
||||
}
|
||||
|
||||
public void drawCenteredString(String text, int sx, int sy, int color)
|
||||
{
|
||||
fontRendererObj.drawString(text, sx - fontRendererObj.getStringWidth(text) / 2, sy - fontRendererObj.FONT_HEIGHT / 2, color);
|
||||
}
|
||||
|
||||
public void drawStringWithShadow(String text, int sx, int sy, int color)
|
||||
{
|
||||
fontRendererObj.drawStringWithShadow(text, sx, sy, color);
|
||||
}
|
||||
|
||||
public void drawCenteredStringWithShadow(String text, int sx, int sy, int color)
|
||||
{
|
||||
fontRendererObj.drawStringWithShadow(text, sx - fontRendererObj.getStringWidth(text) / 2, sy - fontRendererObj.FONT_HEIGHT / 2, color);
|
||||
}
|
||||
|
||||
public FontRenderer fontRendererObj()
|
||||
{
|
||||
return this.fontRendererObj;
|
||||
}
|
||||
|
||||
protected void drawRect(int gx, int gy, int gw, int gh, int c1, int c2)
|
||||
{
|
||||
drawGradientRect(gx, gy, gx + gw, gy + gh, c1, c2);
|
||||
}
|
||||
|
||||
public void drawTiledRect(int rx, int ry, int rw, int rh, int u, int v, int tw, int th)
|
||||
{
|
||||
if(rw == 0 || rh == 0 || tw == 0 || th == 0) return;
|
||||
|
||||
float pixel = 0.00390625f;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
tessellator.startDrawingQuads();
|
||||
|
||||
for(int y = 0; y < rh; y += th)
|
||||
{
|
||||
for(int x = 0; x < rw; x += tw)
|
||||
{
|
||||
int qw = tw;
|
||||
|
||||
if(x + qw > rw)
|
||||
{
|
||||
qw = rw - x;
|
||||
}
|
||||
|
||||
int qh = th;
|
||||
|
||||
if(y + qh > rh)
|
||||
{
|
||||
qh = rh - y;
|
||||
}
|
||||
|
||||
double x1 = rx + x;
|
||||
double x2 = rx + x + qw;
|
||||
double y1 = ry + y;
|
||||
double y2 = ry + y + qh;
|
||||
double u1 = pixel * (u);
|
||||
double u2 = pixel * (u + tw);
|
||||
double v1 = pixel * (v);
|
||||
double v2 = pixel * (v + th);
|
||||
tessellator.addVertexWithUV(x1, y2, this.zLevel, u1, v2);
|
||||
tessellator.addVertexWithUV(x2, y2, this.zLevel, u2, v2);
|
||||
tessellator.addVertexWithUV(x2, y1, this.zLevel, u2, v1);
|
||||
tessellator.addVertexWithUV(x1, y1, this.zLevel, u1, v1);
|
||||
}
|
||||
}
|
||||
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
public void bindTexture(String tex)
|
||||
{
|
||||
GeneralClient.bind(tex);
|
||||
}
|
||||
|
||||
public void playSound(String sound, float volume, float pitch)
|
||||
{
|
||||
// TODO
|
||||
//mc.getSoundHandler().playSoundFX(null, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class GuilScrolledBox extends GuiElement
|
||||
{
|
||||
public int offset = 0;
|
||||
int contentHeight = 0;
|
||||
int scrollingStart = -1;
|
||||
|
||||
public GuilScrolledBox(int x, int y, int w, int h)
|
||||
{
|
||||
super(x, y, w, h);
|
||||
}
|
||||
|
||||
int x0, x1;
|
||||
|
||||
protected void overlayBackground(int start, int end, int color, int a1, int a2)
|
||||
{
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
float f = 32.0F;
|
||||
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setColorRGBA_I(color, a2);
|
||||
tessellator.addVertexWithUV(x0, end, 0.0D, 0.0D, end / f);
|
||||
tessellator.addVertexWithUV(x1, end, 0.0D, gui.width / f, end / f);
|
||||
tessellator.setColorRGBA_I(color, a1);
|
||||
tessellator.addVertexWithUV(x1, start, 0.0D, gui.width / f, start / f);
|
||||
tessellator.addVertexWithUV(x0, start, 0.0D, 0.0D, start / f);
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GuiElement addChild(GuiElement e)
|
||||
{
|
||||
int childBottom = e.y + e.h - 18;
|
||||
if(childBottom > contentHeight)
|
||||
contentHeight = childBottom;
|
||||
|
||||
return super.addChild(e);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void render()
|
||||
{
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(Gui.optionsBackground);
|
||||
x0 = -gui.screenX;
|
||||
x1 = -gui.screenX + gui.width;
|
||||
|
||||
overlayBackground(y, h, 0x202020, 0xff, 0xff);
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glTranslatef(0.0f, offset, 0.0f);
|
||||
super.render();
|
||||
GL11.glPopMatrix();
|
||||
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL11.glDisable(GL11.GL_ALPHA_TEST);
|
||||
GL11.glShadeModel(GL11.GL_SMOOTH);
|
||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
overlayBackground(y, y + 8, 0x000000, 0xff, 0x00);
|
||||
overlayBackground(h - 8, h, 0x000000, 0x00, 0xff);
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
GL11.glShadeModel(GL11.GL_FLAT);
|
||||
GL11.glEnable(GL11.GL_ALPHA_TEST);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
|
||||
Minecraft.getMinecraft().getTextureManager().bindTexture(Gui.optionsBackground);
|
||||
overlayBackground(-gui.screenY, y, 0x404040, 0xff, 0xff);
|
||||
overlayBackground(h, -gui.screenY + gui.height, 0x404040, 0xff, 0xff);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMove(InputMouseEvent ev)
|
||||
{
|
||||
if(scrollingStart != -1)
|
||||
{
|
||||
offset = ev.y - scrollingStart;
|
||||
if(offset > contentHeight) offset = contentHeight;
|
||||
if(offset < -contentHeight) offset = -contentHeight;
|
||||
}
|
||||
|
||||
ev.y -= offset;
|
||||
super.mouseMove(ev);
|
||||
ev.y += offset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDown(InputMouseEvent ev)
|
||||
{
|
||||
scrollingStart = ev.y - offset;
|
||||
|
||||
if(ev.y >= y && ev.y < y + h)
|
||||
{
|
||||
ev.y -= offset;
|
||||
super.mouseDown(ev);
|
||||
ev.y += offset;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseUp(InputMouseEvent ev)
|
||||
{
|
||||
scrollingStart = -1;
|
||||
|
||||
if(ev.y >= y && ev.y < y + h)
|
||||
{
|
||||
ev.y -= offset;
|
||||
super.mouseUp(ev);
|
||||
ev.y += offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
public class InputEvent
|
||||
{
|
||||
public boolean handled;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
public class InputKeyboardEvent extends InputEvent
|
||||
{
|
||||
public int key;
|
||||
public char character;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
public class InputMouseEvent extends InputEvent
|
||||
{
|
||||
public int x;
|
||||
public int y;
|
||||
public int dx;
|
||||
public int dy;
|
||||
public int wheel;
|
||||
public int button;
|
||||
public boolean down;
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
import info.jbcs.minecraft.utilities.GeneralClient;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
|
||||
import org.lwjgl.input.Mouse;
|
||||
|
||||
public abstract class Scrollbar extends GuiButton
|
||||
{
|
||||
public boolean active;
|
||||
|
||||
public float offset;
|
||||
public float step;
|
||||
|
||||
boolean dragged;
|
||||
|
||||
int elementHeight = 15;
|
||||
|
||||
public Scrollbar(int id, int x, int y, int w, int h, String string)
|
||||
{
|
||||
super(id, x, y, w, h, string);
|
||||
offset = 0;
|
||||
step = 0.025f;
|
||||
height = h;
|
||||
active = true;
|
||||
dragged = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the mouse has been pressed on this control. Equivalent of
|
||||
* MouseListener.mousePressed(MouseEvent e).
|
||||
*/
|
||||
@Override
|
||||
public boolean mousePressed(Minecraft mc, int x, int y)
|
||||
{
|
||||
if(x < xPosition || x >= xPosition + width)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(y < yPosition || y >= yPosition + height)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(active)
|
||||
{
|
||||
dragged = true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws this button to the screen.
|
||||
*/
|
||||
@Override
|
||||
public void drawButton(Minecraft mc, int x, int y)
|
||||
{
|
||||
if(dragged)
|
||||
{
|
||||
float initialOffset = offset;
|
||||
int off = y - yPosition - elementHeight / 2;
|
||||
offset = 1.0f * off / (height - elementHeight);
|
||||
|
||||
if(offset < 0)
|
||||
{
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
if(offset > 1)
|
||||
{
|
||||
offset = 1;
|
||||
}
|
||||
|
||||
if(initialOffset != offset)
|
||||
{
|
||||
onScrolled(offset);
|
||||
}
|
||||
}
|
||||
|
||||
int bottom = yPosition + height;
|
||||
GeneralClient.bind("/gui/allitems.png");
|
||||
drawTexturedModalRect(xPosition, yPosition + (int) ((height - elementHeight) * offset), active ? 232 : 244, 0, 12, elementHeight);
|
||||
}
|
||||
|
||||
public void handleMouseInput()
|
||||
{
|
||||
if(Mouse.getEventButton() == 0 && !Mouse.getEventButtonState())
|
||||
{
|
||||
dragged = false;
|
||||
}
|
||||
|
||||
if(!active)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float initialOffset = offset;
|
||||
int direction = Mouse.getEventDWheel();
|
||||
|
||||
if(direction != 0)
|
||||
{
|
||||
offset += direction > 0 ? -step : step;
|
||||
}
|
||||
|
||||
if(offset < 0)
|
||||
{
|
||||
offset = 0;
|
||||
}
|
||||
|
||||
if(offset > 1)
|
||||
{
|
||||
offset = 1;
|
||||
}
|
||||
|
||||
if(initialOffset != offset)
|
||||
{
|
||||
onScrolled(offset);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void onScrolled(float off);
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package info.jbcs.minecraft.chisel.client.gui;
|
||||
|
||||
public class TexturedBox
|
||||
{
|
||||
String texture;
|
||||
int u, v, texw, texh;
|
||||
int borderTop, borderRight, borderBottom, borderLeft;
|
||||
|
||||
public TexturedBox(String texture, int u, int v, int texw, int texh, int borderTop, int borderRight, int borderBottom, int borderLeft)
|
||||
{
|
||||
this.texture = texture;
|
||||
this.u = u;
|
||||
this.v = v;
|
||||
this.texw = texw;
|
||||
this.texh = texh;
|
||||
this.borderTop = borderTop;
|
||||
this.borderRight = borderRight;
|
||||
this.borderBottom = borderBottom;
|
||||
this.borderLeft = borderLeft;
|
||||
}
|
||||
|
||||
public void render(GuiScreenPlus gui, int x, int y, int w, int h)
|
||||
{
|
||||
int x1 = x;
|
||||
int x2 = x + borderLeft;
|
||||
int x3 = x + w - borderRight;
|
||||
int y1 = y;
|
||||
int y2 = y + borderTop;
|
||||
int y3 = y + h - borderBottom;
|
||||
int w1 = borderLeft;
|
||||
int w2 = w - borderLeft - borderRight;
|
||||
int w3 = borderRight;
|
||||
int h1 = borderTop;
|
||||
int h2 = h - borderTop - borderBottom;
|
||||
int h3 = borderBottom;
|
||||
int u1 = u;
|
||||
int v1 = v;
|
||||
int tw = texw;
|
||||
|
||||
if(tw > w)
|
||||
{
|
||||
tw = w;
|
||||
}
|
||||
|
||||
int th = texh;
|
||||
|
||||
if(th > h)
|
||||
{
|
||||
th = h;
|
||||
}
|
||||
|
||||
int u2 = u1 + borderLeft;
|
||||
int u3 = u1 + texw - borderRight;
|
||||
int v2 = v1 + borderTop;
|
||||
int v3 = v1 + texh - borderBottom;
|
||||
int texw1 = borderLeft;
|
||||
int texw2 = tw - borderLeft - borderRight;
|
||||
int texw3 = borderRight;
|
||||
int texh1 = borderTop;
|
||||
int texh2 = th - borderTop - borderBottom;
|
||||
int texh3 = borderBottom;
|
||||
gui.bindTexture(texture);
|
||||
gui.drawTexturedModalRect(x1, y1, u1, v1, w1, h1);
|
||||
gui.drawTiledRect(x2, y1, w2, h1, u2, v1, texw2, texh1);
|
||||
gui.drawTexturedModalRect(x3, y1, u3, v1, w3, h1);
|
||||
gui.drawTiledRect(x1, y2, w1, h2, u1, v2, w1, texh2);
|
||||
gui.drawTiledRect(x2, y2, w2, h2, u2, v2, texw2, texh2);
|
||||
gui.drawTiledRect(x3, y2, w3, h2, u3, v2, w3, texh2);
|
||||
gui.drawTexturedModalRect(x1, y3, u1, v3, w1, h3);
|
||||
gui.drawTiledRect(x2, y3, w2, h3, u2, v3, texw2, texh3);
|
||||
gui.drawTexturedModalRect(x3, y3, u3, v3, w3, h3);
|
||||
}
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.api.ICarvable;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableVariation;
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockAdvancedMarbleRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
RenderBlocksCTM rendererCTM = new RenderBlocksCTM();
|
||||
RenderBlocksColumn rendererColumn = new RenderBlocksColumn();
|
||||
|
||||
public BlockAdvancedMarbleRenderer()
|
||||
{
|
||||
if(Chisel.RenderCTMId == 0)
|
||||
{
|
||||
Chisel.RenderCTMId = RenderingRegistry.getNextAvailableRenderId();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
Drawing.drawBlock(block, metadata, renderer);
|
||||
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks rendererOld)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
CarvableVariation var = ((ICarvable) block).getVariation(meta);
|
||||
|
||||
switch(var == null ? 0 : var.kind)
|
||||
{
|
||||
case CarvableHelper.CTMX:
|
||||
rendererCTM.blockAccess = world;
|
||||
rendererCTM.renderMaxX = 1.0;
|
||||
rendererCTM.renderMaxY = 1.0;
|
||||
rendererCTM.renderMaxZ = 1.0;
|
||||
|
||||
rendererCTM.submap = var.submap;
|
||||
rendererCTM.submapSmall = var.submapSmall;
|
||||
|
||||
rendererCTM.rendererOld = rendererOld;
|
||||
|
||||
return rendererCTM.renderStandardBlock(block, x, y, z);
|
||||
case CarvableHelper.CTMV:
|
||||
rendererColumn.blockAccess = world;
|
||||
rendererColumn.renderMaxX = 1.0;
|
||||
rendererColumn.renderMaxY = 1.0;
|
||||
rendererColumn.renderMaxZ = 1.0;
|
||||
|
||||
rendererColumn.submap = var.seamsCtmVert;
|
||||
rendererColumn.iconTop = var.iconTop;
|
||||
|
||||
return rendererColumn.renderStandardBlock(block, x, y, z);
|
||||
default:
|
||||
return rendererOld.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return Chisel.RenderCTMId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
|
||||
public class BlockCarpetRenderer extends BlockAdvancedMarbleRenderer
|
||||
{
|
||||
|
||||
public BlockCarpetRenderer()
|
||||
{
|
||||
super();
|
||||
|
||||
Chisel.RenderCarpetId = RenderingRegistry.getNextAvailableRenderId();
|
||||
|
||||
rendererCTM = new RenderBlocksCTMCarpet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return Chisel.RenderCarpetId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockEldritchRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public BlockEldritchRenderer()
|
||||
{
|
||||
Chisel.RenderEldritchId = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
Drawing.drawBlock(block, metadata, renderer);
|
||||
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
|
||||
}
|
||||
|
||||
|
||||
RenderBlocksEldritch renderer = new RenderBlocksEldritch();
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks rendererOld)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
// tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
/*
|
||||
double d0 = 0.4000000059604645D;
|
||||
double d1 = 0.5D - d0;
|
||||
double d2 = 0.20000000298023224D;
|
||||
|
||||
*/
|
||||
// renderer.renderTorchAtAngle(Block.torchWood, x - d1, y + d2, z, -d0, 0.0D, 0);
|
||||
/*
|
||||
Icon icon = block.getIcon(2, meta);
|
||||
double u0 = icon.getMinU();
|
||||
double v0 = icon.getMaxV();
|
||||
double u1 = icon.getMaxU();
|
||||
double v1 = icon.getMinV();
|
||||
double uu = icon.getInterpolatedU(8.0D);
|
||||
double vv = icon.getInterpolatedV(8.0D);
|
||||
|
||||
|
||||
int lyp=block.getMixedBrightnessForBlock(world, x, y+1, z);
|
||||
int lym=block.getMixedBrightnessForBlock(world, x, y-1, z);
|
||||
int lxp=block.getMixedBrightnessForBlock(world, x+1, y, z);
|
||||
int lxm=block.getMixedBrightnessForBlock(world, x-1, y, z);
|
||||
int lzp=block.getMixedBrightnessForBlock(world, x, y, z+1);
|
||||
int lzm=block.getMixedBrightnessForBlock(world, x, y, z-1);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
icon = block.getIcon(0, meta);
|
||||
u0 = icon.getMinU();
|
||||
v0 = icon.getMinV();
|
||||
u1 = icon.getMaxU();
|
||||
v1 = icon.getMaxV();
|
||||
vertex(1,u0,v0); vertex(5,u1,v0); vertex(6,u1,v1); vertex(2,u0,v1);
|
||||
|
||||
icon = block.getIcon(1, meta);
|
||||
u0 = icon.getMinU();
|
||||
v0 = icon.getMinV();
|
||||
u1 = icon.getMaxU();
|
||||
v1 = icon.getMaxV();
|
||||
vertex(0,u0,v0); vertex(3,u0,v1); vertex(7,u1,v1); vertex(4,u1,v0);
|
||||
|
||||
*/
|
||||
|
||||
renderer.blockAccess = world;
|
||||
renderer.renderMaxX = 1.0;
|
||||
renderer.renderMaxY = 1.0;
|
||||
renderer.renderMaxZ = 1.0;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
|
||||
return true;
|
||||
/*
|
||||
|
||||
boolean flag = renderer.renderStandardBlock(block, x, y, z);
|
||||
|
||||
return flag;*/
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return Chisel.RenderEldritchId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,339 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockPane;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockMarblePaneRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public static int id;
|
||||
|
||||
public BlockMarblePaneRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
GL11.glScalef(1.25f, 1.25f, 1.25f);
|
||||
renderer.setRenderBounds(0.0f, 0.0f, 0.5f - 0.0625f, 1.0f, 1.0f, 0.5f + 0.0625f);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
}
|
||||
|
||||
class PaneRenderer
|
||||
{
|
||||
Tessellator tessellator;
|
||||
|
||||
double i0u0;
|
||||
double i0uh;
|
||||
double i0u1;
|
||||
double i0v0;
|
||||
double i0v1;
|
||||
|
||||
double i1u0;
|
||||
double i1u1;
|
||||
double i1v0;
|
||||
double i1vh;
|
||||
double i1v1;
|
||||
double i1v;
|
||||
|
||||
double i2u0;
|
||||
double i2u1;
|
||||
double i2v0;
|
||||
double i2v1;
|
||||
double i2v;
|
||||
|
||||
double x0;
|
||||
double xh;
|
||||
double x1;
|
||||
double xp0;
|
||||
double xp1;
|
||||
|
||||
double z0;
|
||||
double zh;
|
||||
double z1;
|
||||
double zp0;
|
||||
double zp1;
|
||||
|
||||
double y0;
|
||||
double y1;
|
||||
|
||||
void set(double x, double y, double z, IIcon icon, IIcon icon1, IIcon icon2)
|
||||
{
|
||||
tessellator = Tessellator.instance;
|
||||
|
||||
i0u0 = icon.getMinU();
|
||||
i0uh = icon.getInterpolatedU(8.0D);
|
||||
i0u1 = icon.getMaxU();
|
||||
i0v0 = icon.getMinV();
|
||||
i0v1 = icon.getMaxV();
|
||||
|
||||
i1u0 = icon1.getInterpolatedU(7.0D);
|
||||
i1u1 = icon1.getInterpolatedU(9.0D);
|
||||
i1v0 = icon1.getMinV();
|
||||
i1vh = icon1.getInterpolatedV(8.0D);
|
||||
i1v1 = icon1.getMaxV();
|
||||
i1v = i1v1 - i1v0;
|
||||
|
||||
i2u0 = icon2.getInterpolatedU(7.0D);
|
||||
i2u1 = icon2.getInterpolatedU(9.0D);
|
||||
i2v0 = icon2.getMinV();
|
||||
i2v1 = icon2.getMaxV();
|
||||
i2v = i2v1 - i2v0;
|
||||
|
||||
x0 = x;
|
||||
xh = x0 + 0.5D;
|
||||
x1 = x + 1;
|
||||
xp0 = x0 + 0.5D - 0.0625D;
|
||||
xp1 = x0 + 0.5D + 0.0625D;
|
||||
|
||||
z0 = z;
|
||||
zh = z0 + 0.5D;
|
||||
z1 = z + 1;
|
||||
zp0 = z0 + 0.5D - 0.0625D;
|
||||
zp1 = z0 + 0.5D + 0.0625D;
|
||||
|
||||
y0 = y;
|
||||
y1 = y + 1;
|
||||
}
|
||||
|
||||
public void renderNorthPane()
|
||||
{
|
||||
tessellator.addVertexWithUV(xh, y1, z0, i0uh, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y0, z0, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u0, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u0, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y0, z0, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y1, z0, i0uh, i0v0);
|
||||
}
|
||||
|
||||
public void renderSouthPane()
|
||||
{
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y0, z1, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y1, z1, i0uh, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y1, z1, i0uh, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y0, z1, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0);
|
||||
}
|
||||
|
||||
public void renderWestPane()
|
||||
{
|
||||
tessellator.addVertexWithUV(x0, y1, zh, i0uh, i0v0);
|
||||
tessellator.addVertexWithUV(x0, y0, zh, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u0, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u0, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u0, i0v1);
|
||||
tessellator.addVertexWithUV(x0, y0, zh, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(x0, y1, zh, i0uh, i0v0);
|
||||
}
|
||||
|
||||
public void renderEastPane()
|
||||
{
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1);
|
||||
tessellator.addVertexWithUV(x1, y0, zh, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(x1, y1, zh, i0uh, i0v0);
|
||||
tessellator.addVertexWithUV(x1, y1, zh, i0uh, i0v0);
|
||||
tessellator.addVertexWithUV(x1, y0, zh, i0uh, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y0, zh, i0u1, i0v1);
|
||||
tessellator.addVertexWithUV(xh, y1, zh, i0u1, i0v0);
|
||||
}
|
||||
|
||||
public void renderVerticalNS(double y, double zoff0, double zoff1, double v0, double v1)
|
||||
{
|
||||
tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff0, i1u0, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff1, i1u0, i1v0 + i1v * v1);
|
||||
tessellator.addVertexWithUV(xp1, y0 + y, z0 + zoff1, i1u1, i1v0 + i1v * v1);
|
||||
tessellator.addVertexWithUV(xp1, y0 + y, z0 + zoff0, i1u1, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff1, i1u0, i1v0 + i1v * v1);
|
||||
tessellator.addVertexWithUV(xp0, y0 + y, z0 + zoff0, i1u0, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(xp1, y0 + y, z0 + zoff0, i1u1, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(xp1, y0 + y, z0 + zoff1, i1u1, i1v0 + i1v * v1);
|
||||
}
|
||||
|
||||
public void renderVerticalWE(double y, double xoff0, double xoff1, double v0, double v1)
|
||||
{
|
||||
tessellator.addVertexWithUV(x0 + xoff0, y0 + y, zp1, i1u1, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp1, i1u1, i1v0 + i1v * v1);
|
||||
tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp0, i1u0, i1v0 + i1v * v1);
|
||||
tessellator.addVertexWithUV(x0 + xoff0, y0 + y, zp0, i1u0, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp1, i1u1, i1v0 + i1v * v1);
|
||||
tessellator.addVertexWithUV(x0 + xoff0, y0 + y, zp1, i1u1, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff0, y0 + y, zp0, i1u0, i1v0 + i1v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff1, y0 + y, zp0, i1u0, i1v0 + i1v * v1);
|
||||
}
|
||||
|
||||
|
||||
public void renderHorizontalNS(double zoff, double v0, double v1)
|
||||
{
|
||||
tessellator.addVertexWithUV(xp0, y1, z0 + zoff, i2u0, i2v0 + i2v * v1);
|
||||
tessellator.addVertexWithUV(xp0, y0, z0 + zoff, i2u0, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(xp1, y0, z0 + zoff, i2u1, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(xp1, y1, z0 + zoff, i2u1, i2v0 + i2v * v1);
|
||||
tessellator.addVertexWithUV(xp1, y1, z0 + zoff, i2u1, i2v0 + i2v * v1);
|
||||
tessellator.addVertexWithUV(xp1, y0, z0 + zoff, i2u1, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(xp0, y0, z0 + zoff, i2u0, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(xp0, y1, z0 + zoff, i2u0, i2v0 + i2v * v1);
|
||||
|
||||
}
|
||||
|
||||
public void renderHorizontalWE(double xoff, double v0, double v1)
|
||||
{
|
||||
tessellator.addVertexWithUV(x0 + xoff, y1, zp0, i2u0, i2v0 + i2v * v1);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y0, zp0, i2u0, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y0, zp1, i2u1, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y1, zp1, i2u1, i2v0 + i2v * v1);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y1, zp1, i2u1, i2v0 + i2v * v1);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y0, zp1, i2u1, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y0, zp0, i2u0, i2v0 + i2v * v0);
|
||||
tessellator.addVertexWithUV(x0 + xoff, y1, zp0, i2u0, i2v0 + i2v * v1);
|
||||
}
|
||||
}
|
||||
|
||||
PaneRenderer paneRenderer = new PaneRenderer();
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
BlockPane block = (BlockPane) b;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
int worldHeight = world.getHeight();
|
||||
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
|
||||
float f = 1.0F;
|
||||
int i1 = block.colorMultiplier(world, x, y, z);
|
||||
float f1 = (i1 >> 16 & 255) / 255.0F;
|
||||
float f2 = (i1 >> 8 & 255) / 255.0F;
|
||||
float f3 = (i1 & 255) / 255.0F;
|
||||
|
||||
if(EntityRenderer.anaglyphEnable)
|
||||
{
|
||||
float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
|
||||
float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
|
||||
float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
|
||||
f1 = f4;
|
||||
f2 = f5;
|
||||
f3 = f6;
|
||||
}
|
||||
tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
|
||||
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
IIcon iconPane = block.getIcon(2, meta);
|
||||
IIcon iconTop = block.getIcon(1, meta);
|
||||
IIcon iconSide = block.getIcon(0, meta);
|
||||
if(iconPane == null || iconTop == null || iconSide == null) return false;
|
||||
|
||||
paneRenderer.set(x, y, z, iconPane, iconTop, iconSide);
|
||||
|
||||
boolean connectsNorth = block.canPaneConnectToBlock(world.getBlock(x, y, z - 1));
|
||||
boolean connectsSouth = block.canPaneConnectToBlock(world.getBlock(x, y, z + 1));
|
||||
boolean connectsWest = block.canPaneConnectToBlock(world.getBlock(x - 1, y, z));
|
||||
boolean connectsEast = block.canPaneConnectToBlock(world.getBlock(x + 1, y, z));
|
||||
boolean connectsTop = block.canPaneConnectToBlock(world.getBlock(x, y + 1, z));
|
||||
boolean connectsBottom = block.canPaneConnectToBlock(world.getBlock(x, y - 1, z));
|
||||
|
||||
boolean connectsTopNorth = block.canPaneConnectToBlock(world.getBlock(x, y + 1, z - 1));
|
||||
boolean connectsTopSouth = block.canPaneConnectToBlock(world.getBlock(x, y + 1, z + 1));
|
||||
boolean connectsTopWest = block.canPaneConnectToBlock(world.getBlock(x - 1, y + 1, z));
|
||||
boolean connectsTopEast = block.canPaneConnectToBlock(world.getBlock(x + 1, y + 1, z));
|
||||
|
||||
boolean connectsBottomNorth = block.canPaneConnectToBlock(world.getBlock(x, y - 1, z - 1));
|
||||
boolean connectsBottomSouth = block.canPaneConnectToBlock(world.getBlock(x, y - 1, z + 1));
|
||||
boolean connectsBottomWest = block.canPaneConnectToBlock(world.getBlock(x - 1, y - 1, z));
|
||||
boolean connectsBottomEast = block.canPaneConnectToBlock(world.getBlock(x + 1, y - 1, z));
|
||||
|
||||
boolean isolatedTop = !connectsTopNorth && !connectsTopSouth && !connectsTopWest && !connectsTopEast;
|
||||
boolean isolatedBottom = !connectsBottomNorth && !connectsBottomSouth && !connectsBottomWest && !connectsBottomEast;
|
||||
|
||||
if(!connectsNorth && !connectsSouth && !connectsWest && !connectsEast)
|
||||
{
|
||||
connectsNorth = connectsSouth = connectsWest = connectsEast = true;
|
||||
}
|
||||
|
||||
int connections = 0;
|
||||
if(connectsNorth)
|
||||
{
|
||||
paneRenderer.renderNorthPane();
|
||||
if(!connectsBottom || !connectsBottomNorth && !isolatedBottom)
|
||||
paneRenderer.renderVerticalNS(-0.0003, 0.0, 0.5, 0.5, 0.0);
|
||||
if(!connectsTop || !connectsTopNorth && !isolatedTop)
|
||||
paneRenderer.renderVerticalNS(+1.0003, 0.0, 0.5, 0.5, 0.0);
|
||||
connections++;
|
||||
}
|
||||
if(connectsSouth)
|
||||
{
|
||||
paneRenderer.renderSouthPane();
|
||||
if(!connectsBottom || !connectsBottomSouth && !isolatedBottom)
|
||||
paneRenderer.renderVerticalNS(-0.0004, 0.5, 1.0, 1.0, 0.5);
|
||||
if(!connectsTop || !connectsTopSouth && !isolatedTop)
|
||||
paneRenderer.renderVerticalNS(+1.0004, 0.5, 1.0, 1.0, 0.5);
|
||||
connections++;
|
||||
}
|
||||
if(connectsWest)
|
||||
{
|
||||
paneRenderer.renderWestPane();
|
||||
if(!connectsBottom || !connectsBottomWest && !isolatedBottom)
|
||||
paneRenderer.renderVerticalWE(-0.0001, 0.0, 0.5, 0.5, 0.0);
|
||||
if(!connectsTop || !connectsTopWest && !isolatedTop)
|
||||
paneRenderer.renderVerticalWE(+1.0001, 0.0, 0.5, 0.5, 0.0);
|
||||
connections++;
|
||||
}
|
||||
if(connectsEast)
|
||||
{
|
||||
paneRenderer.renderEastPane();
|
||||
if(!connectsBottom || !connectsBottomEast && !isolatedBottom)
|
||||
paneRenderer.renderVerticalWE(-0.0002, 0.5, 1.0, 1.0, 0.5);
|
||||
if(!connectsTop || !connectsTopEast && !isolatedTop)
|
||||
paneRenderer.renderVerticalWE(+1.0002, 0.5, 1.0, 1.0, 0.5);
|
||||
connections++;
|
||||
}
|
||||
|
||||
|
||||
if(connections == 1)
|
||||
{
|
||||
if(connectsNorth) paneRenderer.renderHorizontalNS(0.5, 1.0, 0.0);
|
||||
if(connectsSouth) paneRenderer.renderHorizontalNS(0.5, 0.0, 1.0);
|
||||
if(connectsEast) paneRenderer.renderHorizontalWE(0.5, 0.0, 1.0);
|
||||
if(connectsWest) paneRenderer.renderHorizontalWE(0.5, 1.0, 0.0);
|
||||
} else if(connections == 4)
|
||||
{
|
||||
paneRenderer.renderHorizontalNS(0.0, 1.0, 0.0);
|
||||
paneRenderer.renderHorizontalNS(1.0, 0.0, 1.0);
|
||||
paneRenderer.renderHorizontalWE(0.0, 0.0, 1.0);
|
||||
paneRenderer.renderHorizontalWE(1.0, 1.0, 0.0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
}
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.carving.CarvableHelper;
|
||||
import info.jbcs.minecraft.chisel.block.BlockMarblePillar;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockMarblePillarRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public static int id;
|
||||
|
||||
public BlockMarblePillarRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block blck, int metadata, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
if(!(blck instanceof BlockMarblePillar))
|
||||
return;
|
||||
|
||||
BlockMarblePillar block = (BlockMarblePillar) blck;
|
||||
|
||||
block.sides[0] = block.sides[1] = block.getCtmIcon(4, metadata);
|
||||
block.sides[2] = block.sides[3] = block.sides[4] = block.sides[5] = block.getCtmIcon(0, metadata);
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
Drawing.drawBlock(block, metadata, renderer);
|
||||
}
|
||||
|
||||
boolean connected(IBlockAccess world, int x, int y, int z, Block block, int meta)
|
||||
{
|
||||
return world.getBlock(x, y, z).equals(block) && world.getBlockMetadata(x, y, z) == meta;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block blck, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
if(!(blck instanceof BlockMarblePillar))
|
||||
return false;
|
||||
|
||||
BlockMarblePillar block = (BlockMarblePillar) blck;
|
||||
|
||||
int metadata = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if(block.carverHelper.variations.get(metadata).kind != CarvableHelper.CTMV)
|
||||
{
|
||||
block.sides[0] = block.carverHelper.getIcon(0, metadata);
|
||||
block.sides[1] = block.carverHelper.getIcon(1, metadata);
|
||||
block.sides[2] = block.carverHelper.getIcon(2, metadata);
|
||||
block.sides[3] = block.carverHelper.getIcon(3, metadata);
|
||||
block.sides[4] = block.carverHelper.getIcon(4, metadata);
|
||||
block.sides[5] = block.carverHelper.getIcon(5, metadata);
|
||||
|
||||
return renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
boolean yp = connected(world, x, y + 1, z, block, metadata);
|
||||
boolean yn = connected(world, x, y - 1, z, block, metadata);
|
||||
|
||||
if(yp || yn)
|
||||
{
|
||||
block.sides[0] = block.getCtmIcon(4, metadata);
|
||||
block.sides[1] = block.getCtmIcon(4, metadata);
|
||||
|
||||
if(yp && yn)
|
||||
block.sides[2] = block.getCtmIcon(2, metadata);
|
||||
else if(yp)
|
||||
block.sides[2] = block.getCtmIcon(3, metadata);
|
||||
else
|
||||
block.sides[2] = block.getCtmIcon(1, metadata);
|
||||
|
||||
block.sides[3] = block.sides[4] = block.sides[5] = block.sides[2];
|
||||
} else
|
||||
{
|
||||
boolean xp = connected(world, x + 1, y, z, block, metadata);
|
||||
boolean xn = connected(world, x - 1, y, z, block, metadata);
|
||||
|
||||
if(xp && (connected(world, x + 1, y + 1, z, block, metadata) || connected(world, x + 1, y - 1, z, block, metadata)))
|
||||
xp = false;
|
||||
if(xn && (connected(world, x - 1, y + 1, z, block, metadata) || connected(world, x - 1, y - 1, z, block, metadata)))
|
||||
xn = false;
|
||||
|
||||
if(xp || xn)
|
||||
{
|
||||
renderer.uvRotateEast = 2;
|
||||
renderer.uvRotateWest = 1;
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateBottom = 1;
|
||||
|
||||
block.sides[4] = block.getCtmIcon(4, metadata);
|
||||
block.sides[5] = block.getCtmIcon(4, metadata);
|
||||
|
||||
if(xp && xn)
|
||||
block.sides[0] = block.getCtmIcon(2, metadata);
|
||||
else if(xp)
|
||||
block.sides[0] = block.getCtmIcon(3, metadata);
|
||||
else
|
||||
block.sides[0] = block.getCtmIcon(1, metadata);
|
||||
|
||||
block.sides[1] = block.sides[2] = block.sides[3] = block.sides[0];
|
||||
} else
|
||||
{
|
||||
boolean zp = connected(world, x, y, z + 1, block, metadata);
|
||||
boolean zn = connected(world, x, y, z - 1, block, metadata);
|
||||
|
||||
if(zp && (connected(world, x, y + 1, z + 1, block, metadata) || connected(world, x, y - 1, z + 1, block, metadata)))
|
||||
zp = false;
|
||||
if(zp && (connected(world, x + 1, y, z + 1, block, metadata) || connected(world, x - 1, y, z + 1, block, metadata)))
|
||||
zp = false;
|
||||
if(zn && (connected(world, x, y + 1, z - 1, block, metadata) || connected(world, x, y - 1, z - 1, block, metadata)))
|
||||
zn = false;
|
||||
if(zn && (connected(world, x + 1, y, z - 1, block, metadata) || connected(world, x - 1, y, z - 1, block, metadata)))
|
||||
zn = false;
|
||||
|
||||
if(zp || zn)
|
||||
{
|
||||
renderer.uvRotateSouth = 1;
|
||||
renderer.uvRotateNorth = 2;
|
||||
|
||||
block.sides[2] = block.getCtmIcon(4, metadata);
|
||||
block.sides[3] = block.getCtmIcon(4, metadata);
|
||||
|
||||
if(zp && zn)
|
||||
block.sides[0] = block.getCtmIcon(2, metadata);
|
||||
else if(zp)
|
||||
block.sides[0] = block.getCtmIcon(1, metadata);
|
||||
else
|
||||
block.sides[0] = block.getCtmIcon(3, metadata);
|
||||
|
||||
block.sides[1] = block.sides[4] = block.sides[5] = block.sides[0];
|
||||
} else
|
||||
{
|
||||
block.sides[0] = block.sides[1] = block.getCtmIcon(4, metadata);
|
||||
block.sides[2] = block.sides[3] = block.sides[4] = block.sides[5] = block.getCtmIcon(0, metadata);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
boolean flag = renderer.renderStandardBlock(block, x, y, z);
|
||||
|
||||
renderer.uvRotateSouth = 0;
|
||||
renderer.uvRotateEast = 0;
|
||||
renderer.uvRotateWest = 0;
|
||||
renderer.uvRotateNorth = 0;
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockMarbleStairs;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockMarbleStairsRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public static int id;
|
||||
|
||||
public BlockMarbleStairsRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
renderer.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
renderer.setRenderBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block blck, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
if(blck == null || !(blck instanceof BlockMarbleStairs))
|
||||
return false;
|
||||
BlockMarbleStairs block = (BlockMarbleStairs) blck;
|
||||
|
||||
renderer.renderBlockStairs(block, x, y, z);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public int getRenderBlockPass()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockNoCTMRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
static int id;
|
||||
|
||||
public BlockNoCTMRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if(meta != 0) renderer.overrideBlockTexture = block.getIcon(0, meta);
|
||||
renderer.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.overrideBlockTexture = null;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockRoadLine;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockRoadLineRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public static int id;
|
||||
|
||||
public BlockRoadLineRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
renderer.setRenderBoundsFromBlock(block);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
}
|
||||
|
||||
public void renderTopFace(double y, IIcon icon)
|
||||
{
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
tessellator.addVertexWithUV(1, y, 0, icon.getMaxU(), icon.getMinV());
|
||||
tessellator.addVertexWithUV(0, y, 0, icon.getMinU(), icon.getMinV());
|
||||
tessellator.addVertexWithUV(0, y, 1, icon.getMinU(), icon.getMaxV());
|
||||
tessellator.addVertexWithUV(1, y, 1, icon.getMaxU(), icon.getMaxV());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
BlockRoadLine block = (BlockRoadLine) b;
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
|
||||
float f = 1.0F;
|
||||
int i1 = block.colorMultiplier(world, x, y, z);
|
||||
float f1 = (i1 >> 16 & 255) / 255.0F;
|
||||
float f2 = (i1 >> 8 & 255) / 255.0F;
|
||||
float f3 = (i1 & 255) / 255.0F;
|
||||
|
||||
if(EntityRenderer.anaglyphEnable)
|
||||
{
|
||||
float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
|
||||
float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
|
||||
float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
|
||||
f1 = f4;
|
||||
f2 = f5;
|
||||
f3 = f6;
|
||||
}
|
||||
tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
|
||||
|
||||
boolean N = world.getBlock(x, y, z - 1).equals(block);
|
||||
boolean S = world.getBlock(x, y, z + 1).equals(block);
|
||||
boolean W = world.getBlock(x - 1, y, z).equals(block);
|
||||
boolean E = world.getBlock(x + 1, y, z).equals(block);
|
||||
|
||||
if(!N && !S && !W && !E)
|
||||
{
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
return true;
|
||||
}
|
||||
|
||||
if(N && S)
|
||||
{
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.overrideBlockTexture = block.fullLineIcon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
|
||||
} else
|
||||
{
|
||||
if(N)
|
||||
{
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.overrideBlockTexture = block.halfLineIcon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(S)
|
||||
{
|
||||
renderer.uvRotateTop = 3;
|
||||
renderer.overrideBlockTexture = block.halfLineIcon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(E && W)
|
||||
{
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.overrideBlockTexture = block.fullLineIcon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
} else
|
||||
{
|
||||
if(E)
|
||||
{
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.overrideBlockTexture = block.halfLineIcon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
if(W)
|
||||
{
|
||||
renderer.uvRotateTop = 2;
|
||||
renderer.overrideBlockTexture = block.halfLineIcon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.overrideBlockTexture = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockSnakestone;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockSnakeStoneRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public static int id;
|
||||
|
||||
public BlockSnakeStoneRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
setRenderRotate(renderer, (BlockSnakestone) block, meta);
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
|
||||
restoreRendererRotate(renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
setRenderRotate(renderer, (BlockSnakestone) block, meta);
|
||||
boolean didRender = renderer.renderStandardBlock(block, x, y, z);
|
||||
restoreRendererRotate(renderer);
|
||||
|
||||
return didRender;
|
||||
}
|
||||
|
||||
private void restoreRendererRotate(RenderBlocks renderer)
|
||||
{
|
||||
renderer.uvRotateSouth = 0;
|
||||
renderer.uvRotateEast = 0;
|
||||
renderer.uvRotateWest = 0;
|
||||
renderer.uvRotateNorth = 0;
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
}
|
||||
|
||||
private void setRenderRotate(RenderBlocks renderer, BlockSnakestone block, int meta)
|
||||
{
|
||||
int type = meta & 0xC;
|
||||
int orient = meta & 0x3;
|
||||
|
||||
|
||||
if(type == 0)
|
||||
{
|
||||
switch(orient)
|
||||
{
|
||||
case 0:
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateBottom = 2;
|
||||
break;
|
||||
case 1:
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateBottom = 1;
|
||||
break;
|
||||
case 2:
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 3;
|
||||
break;
|
||||
case 3:
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
}
|
||||
|
||||
} else if((type == 4) || (type == 8))
|
||||
{
|
||||
switch(orient)
|
||||
{
|
||||
case 0:
|
||||
renderer.uvRotateTop = block.flipTopTextures ? 1 : 2;
|
||||
renderer.uvRotateBottom = 1;
|
||||
renderer.uvRotateWest = 2;
|
||||
break;
|
||||
case 1:
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateBottom = 1;
|
||||
renderer.uvRotateEast = 2;
|
||||
break;
|
||||
case 2:
|
||||
renderer.uvRotateTop = block.flipTopTextures ? 0 : 3;
|
||||
renderer.uvRotateBottom = 0;
|
||||
renderer.uvRotateSouth = 2;
|
||||
break;
|
||||
case 3:
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
renderer.uvRotateNorth = 2;
|
||||
}
|
||||
|
||||
} else if(type == 12)
|
||||
{
|
||||
switch(orient)
|
||||
{
|
||||
case 0:
|
||||
renderer.uvRotateTop = 0;
|
||||
renderer.uvRotateBottom = 0;
|
||||
break;
|
||||
case 1:
|
||||
renderer.uvRotateTop = 1;
|
||||
renderer.uvRotateBottom = 1;
|
||||
break;
|
||||
case 2:
|
||||
renderer.uvRotateNorth = 2;
|
||||
renderer.uvRotateSouth = 2;
|
||||
renderer.uvRotateEast = 2;
|
||||
renderer.uvRotateWest = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.ChiselBlocks;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockSpikesRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
public static int id;
|
||||
|
||||
public BlockSpikesRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
}
|
||||
|
||||
void drawSpike(IIcon icon, double r, double h, double x, double y, double z, double dx, double dz)
|
||||
{
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
|
||||
double u0 = icon.getMinU();
|
||||
double u1 = icon.getMaxU();
|
||||
double v0 = icon.getMaxV();
|
||||
double v1 = icon.getMinV();
|
||||
|
||||
double tx = x + dx;
|
||||
double ty = y + h;
|
||||
double tz = z + dz;
|
||||
|
||||
tessellator.addVertexWithUV(x + r, y + 0, z + r, u0, v0);
|
||||
tessellator.addVertexWithUV(x + r, y + 0, z - r, u1, v0);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u1, v1);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u0, v1);
|
||||
|
||||
tessellator.addVertexWithUV(x - r, y + 0, z + r, u1, v0);
|
||||
tessellator.addVertexWithUV(x + r, y + 0, z + r, u0, v0);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u1, v1);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u0, v1);
|
||||
|
||||
|
||||
tessellator.addVertexWithUV(x + r, y + 0, z - r, u1, v0);
|
||||
tessellator.addVertexWithUV(x - r, y + 0, z - r, u0, v0);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u1, v1);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u0, v1);
|
||||
|
||||
tessellator.addVertexWithUV(x - r, y + 0, z - r, u1, v0);
|
||||
tessellator.addVertexWithUV(x - r, y + 0, z + r, u0, v0);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u1, v1);
|
||||
tessellator.addVertexWithUV(tx, ty, tz, u0, v1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
IIcon icon = ChiselBlocks.blockSpiketrap.iconSpike;
|
||||
// Icon icon=Chisel.blockSpiketrap.iconBase;
|
||||
|
||||
double h = 0.85;
|
||||
double d = 1.5 / 16;
|
||||
double r = d / 2;
|
||||
|
||||
|
||||
double tx = x + 0.25;
|
||||
double ty = y + h;
|
||||
double tz = z + 0.25;
|
||||
double skew = 0.5;
|
||||
|
||||
// tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
tessellator.addTranslation(0, 1.0f / 16, 0);
|
||||
|
||||
Random rand = new Random();
|
||||
for(int xx = 0; xx < 4; xx++)
|
||||
{
|
||||
for(int yy = 0; yy < 4; yy++)
|
||||
{
|
||||
// float sx=1.0f/16+rand.nextFloat()*13.0f/16;
|
||||
// float sz=1.0f/16+rand.nextFloat()*13.0f/16;
|
||||
float sx = (2.0f + (12.0f - (float) d) * xx / 3) / 16;
|
||||
float sz = (2.0f + (12.0f - (float) d) * yy / 3) / 16;
|
||||
|
||||
|
||||
tessellator.addTranslation(sx, 0, sz);
|
||||
drawSpike(icon, r, 0.5 + rand.nextDouble() * 0.35, x, y, z, rand.nextDouble() * skew - skew / 2, rand.nextDouble() * skew - skew / 2);
|
||||
tessellator.addTranslation(-sx, 0, -sz);
|
||||
}
|
||||
}
|
||||
|
||||
tessellator.addTranslation(0, -1.0f / 16, 0);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int renderId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockTexturedOre;
|
||||
import info.jbcs.minecraft.utilities.Drawing;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class BlockTexturedOreRenderer implements ISimpleBlockRenderingHandler
|
||||
{
|
||||
float bot = -0.001f, top = 1.0f - bot;
|
||||
public static int id;
|
||||
|
||||
public BlockTexturedOreRenderer()
|
||||
{
|
||||
id = RenderingRegistry.getNextAvailableRenderId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block blck, int meta, int modelID, RenderBlocks renderer)
|
||||
{
|
||||
if(blck == null || !(blck instanceof BlockTexturedOre))
|
||||
return;
|
||||
|
||||
BlockTexturedOre block = (BlockTexturedOre) blck;
|
||||
|
||||
if(block.icon != null)
|
||||
{
|
||||
renderer.overrideBlockTexture = block.icon;
|
||||
renderer.renderBlockAsItem(Blocks.stone, meta, 1.0f);
|
||||
renderer.overrideBlockTexture = null;
|
||||
} else if(block.base != null)
|
||||
{
|
||||
renderer.renderBlockAsItem(block.base, meta, 1.0f);
|
||||
}
|
||||
|
||||
GL11.glEnable(3042);
|
||||
GL11.glBlendFunc(770, 771);
|
||||
renderer.setRenderBounds(bot, bot, bot, top, top, top);
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
Drawing.drawBlock(block, meta, renderer);
|
||||
GL11.glDisable(3042);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block blck, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
if(blck == null || !(blck instanceof BlockTexturedOre))
|
||||
return false;
|
||||
BlockTexturedOre block = (BlockTexturedOre) blck;
|
||||
|
||||
if(block.currentPass == 0)
|
||||
{
|
||||
if(block.icon != null)
|
||||
{
|
||||
renderer.overrideBlockTexture = block.icon;
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
renderer.overrideBlockTexture = null;
|
||||
} else if(block.base != null)
|
||||
{
|
||||
renderer.renderBlockByRenderType(block.base, x, y, z);
|
||||
}
|
||||
} else
|
||||
{
|
||||
renderer.setRenderBounds(bot, bot, bot, top, top, top);
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int modelId)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,307 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import info.jbcs.minecraft.chisel.api.IFacade;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class CTM
|
||||
{
|
||||
static int submaps[][] = {
|
||||
{16, 17, 18, 19},
|
||||
{16, 9, 18, 13},
|
||||
{8, 9, 12, 13},
|
||||
{8, 17, 12, 19},
|
||||
{16, 9, 6, 15},
|
||||
{8, 17, 14, 7},
|
||||
{2, 11, 6, 15},
|
||||
{8, 9, 14, 15},
|
||||
{10, 1, 14, 15},
|
||||
{10, 11, 14, 5},
|
||||
{0, 11, 4, 15},
|
||||
{0, 1, 14, 15},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{16, 17, 6, 7},
|
||||
{16, 9, 6, 5},
|
||||
{8, 9, 4, 5},
|
||||
{8, 17, 4, 7},
|
||||
{2, 11, 18, 13},
|
||||
{10, 3, 12, 19},
|
||||
{10, 11, 12, 13},
|
||||
{10, 3, 14, 7},
|
||||
{0, 11, 14, 15},
|
||||
{10, 11, 4, 15},
|
||||
{10, 11, 4, 5},
|
||||
{10, 1, 14, 5},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{2, 3, 6, 7},
|
||||
{2, 1, 6, 5},
|
||||
{0, 1, 4, 5},
|
||||
{0, 3, 4, 7},
|
||||
{2, 11, 6, 5},
|
||||
{8, 9, 4, 15},
|
||||
{2, 1, 6, 15},
|
||||
{8, 9, 14, 5},
|
||||
{0, 1, 4, 15},
|
||||
{0, 1, 14, 5},
|
||||
{10, 1, 4, 15},
|
||||
{0, 11, 14, 5},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{2, 3, 18, 19},
|
||||
{2, 1, 18, 13},
|
||||
{0, 1, 12, 13},
|
||||
{0, 3, 12, 19},
|
||||
{10, 1, 12, 13},
|
||||
{0, 3, 14, 7},
|
||||
{0, 11, 12, 13},
|
||||
{10, 3, 4, 7},
|
||||
{0, 11, 4, 5},
|
||||
{10, 1, 4, 5},
|
||||
{10, 11, 14, 15},
|
||||
{0, 1, 4, 5},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
{},
|
||||
};
|
||||
|
||||
public static int[] getSubmapIndices(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
int index = getTexture(world, x, y, z, side);
|
||||
|
||||
return submaps[index];
|
||||
}
|
||||
|
||||
public static int getTexture(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
if(world == null)
|
||||
return 0;
|
||||
|
||||
int texture = 0;
|
||||
Block block = world.getBlock(x, y, z);
|
||||
int blockMetadata = world.getBlockMetadata(x, y, z);
|
||||
|
||||
boolean b[] = new boolean[6];
|
||||
if(side <= 1)
|
||||
{
|
||||
b[0] = isConnected(world, x - 1, y, z, side, block, blockMetadata);
|
||||
b[1] = isConnected(world, x + 1, y, z, side, block, blockMetadata);
|
||||
b[2] = isConnected(world, x, y, z + 1, side, block, blockMetadata);
|
||||
b[3] = isConnected(world, x, y, z - 1, side, block, blockMetadata);
|
||||
} else if(side == 2)
|
||||
{
|
||||
b[0] = isConnected(world, x + 1, y, z, side, block, blockMetadata);
|
||||
b[1] = isConnected(world, x - 1, y, z, side, block, blockMetadata);
|
||||
b[2] = isConnected(world, x, y - 1, z, side, block, blockMetadata);
|
||||
b[3] = isConnected(world, x, y + 1, z, side, block, blockMetadata);
|
||||
} else if(side == 3)
|
||||
{
|
||||
b[0] = isConnected(world, x - 1, y, z, side, block, blockMetadata);
|
||||
b[1] = isConnected(world, x + 1, y, z, side, block, blockMetadata);
|
||||
b[2] = isConnected(world, x, y - 1, z, side, block, blockMetadata);
|
||||
b[3] = isConnected(world, x, y + 1, z, side, block, blockMetadata);
|
||||
} else if(side == 4)
|
||||
{
|
||||
b[0] = isConnected(world, x, y, z - 1, side, block, blockMetadata);
|
||||
b[1] = isConnected(world, x, y, z + 1, side, block, blockMetadata);
|
||||
b[2] = isConnected(world, x, y - 1, z, side, block, blockMetadata);
|
||||
b[3] = isConnected(world, x, y + 1, z, side, block, blockMetadata);
|
||||
} else if(side == 5)
|
||||
{
|
||||
b[0] = isConnected(world, x, y, z + 1, side, block, blockMetadata);
|
||||
b[1] = isConnected(world, x, y, z - 1, side, block, blockMetadata);
|
||||
b[2] = isConnected(world, x, y - 1, z, side, block, blockMetadata);
|
||||
b[3] = isConnected(world, x, y + 1, z, side, block, blockMetadata);
|
||||
}
|
||||
if(b[0] & !b[1] & !b[2] & !b[3])
|
||||
texture = 3;
|
||||
else if(!b[0] & b[1] & !b[2] & !b[3])
|
||||
texture = 1;
|
||||
else if(!b[0] & !b[1] & b[2] & !b[3])
|
||||
texture = 16;
|
||||
else if(!b[0] & !b[1] & !b[2] & b[3])
|
||||
texture = 48;
|
||||
else if(b[0] & b[1] & !b[2] & !b[3])
|
||||
texture = 2;
|
||||
else if(!b[0] & !b[1] & b[2] & b[3])
|
||||
texture = 32;
|
||||
else if(b[0] & !b[1] & b[2] & !b[3])
|
||||
texture = 19;
|
||||
else if(b[0] & !b[1] & !b[2] & b[3])
|
||||
texture = 51;
|
||||
else if(!b[0] & b[1] & b[2] & !b[3])
|
||||
texture = 17;
|
||||
else if(!b[0] & b[1] & !b[2] & b[3])
|
||||
texture = 49;
|
||||
else if(!b[0] & b[1] & b[2] & b[3])
|
||||
texture = 33;
|
||||
else if(b[0] & !b[1] & b[2] & b[3])
|
||||
texture = 35;
|
||||
else if(b[0] & b[1] & !b[2] & b[3])
|
||||
texture = 50;
|
||||
else if(b[0] & b[1] & b[2] & !b[3])
|
||||
texture = 18;
|
||||
else if(b[0] & b[1] & b[2] & b[3])
|
||||
texture = 34;
|
||||
|
||||
boolean b2[] = new boolean[6];
|
||||
if(side <= 1)
|
||||
{
|
||||
b2[0] = !isConnected(world, x + 1, y, z + 1, side, block, blockMetadata);
|
||||
b2[1] = !isConnected(world, x - 1, y, z + 1, side, block, blockMetadata);
|
||||
b2[2] = !isConnected(world, x + 1, y, z - 1, side, block, blockMetadata);
|
||||
b2[3] = !isConnected(world, x - 1, y, z - 1, side, block, blockMetadata);
|
||||
} else if(side == 2)
|
||||
{
|
||||
b2[0] = !isConnected(world, x - 1, y - 1, z, side, block, blockMetadata);
|
||||
b2[1] = !isConnected(world, x + 1, y - 1, z, side, block, blockMetadata);
|
||||
b2[2] = !isConnected(world, x - 1, y + 1, z, side, block, blockMetadata);
|
||||
b2[3] = !isConnected(world, x + 1, y + 1, z, side, block, blockMetadata);
|
||||
} else if(side == 3)
|
||||
{
|
||||
b2[0] = !isConnected(world, x + 1, y - 1, z, side, block, blockMetadata);
|
||||
b2[1] = !isConnected(world, x - 1, y - 1, z, side, block, blockMetadata);
|
||||
b2[2] = !isConnected(world, x + 1, y + 1, z, side, block, blockMetadata);
|
||||
b2[3] = !isConnected(world, x - 1, y + 1, z, side, block, blockMetadata);
|
||||
} else if(side == 4)
|
||||
{
|
||||
b2[0] = !isConnected(world, x, y - 1, z + 1, side, block, blockMetadata);
|
||||
b2[1] = !isConnected(world, x, y - 1, z - 1, side, block, blockMetadata);
|
||||
b2[2] = !isConnected(world, x, y + 1, z + 1, side, block, blockMetadata);
|
||||
b2[3] = !isConnected(world, x, y + 1, z - 1, side, block, blockMetadata);
|
||||
} else if(side == 5)
|
||||
{
|
||||
b2[0] = !isConnected(world, x, y - 1, z - 1, side, block, blockMetadata);
|
||||
b2[1] = !isConnected(world, x, y - 1, z + 1, side, block, blockMetadata);
|
||||
b2[2] = !isConnected(world, x, y + 1, z - 1, side, block, blockMetadata);
|
||||
b2[3] = !isConnected(world, x, y + 1, z + 1, side, block, blockMetadata);
|
||||
}
|
||||
|
||||
if(texture == 17 && b2[0])
|
||||
texture = 4;
|
||||
if(texture == 19 && b2[1])
|
||||
texture = 5;
|
||||
if(texture == 49 && b2[2])
|
||||
texture = 20;
|
||||
if(texture == 51 && b2[3])
|
||||
texture = 21;
|
||||
|
||||
if(texture == 18 && b2[0] && b2[1])
|
||||
texture = 7;
|
||||
if(texture == 33 && b2[0] && b2[2])
|
||||
texture = 6;
|
||||
if(texture == 35 && b2[3] && b2[1])
|
||||
texture = 23;
|
||||
if(texture == 50 && b2[3] && b2[2])
|
||||
texture = 22;
|
||||
|
||||
if(texture == 18 && !b2[0] && b2[1])
|
||||
texture = 39;
|
||||
if(texture == 33 && b2[0] && !b2[2])
|
||||
texture = 38;
|
||||
if(texture == 35 && !b2[3] && b2[1])
|
||||
texture = 53;
|
||||
if(texture == 50 && b2[3] && !b2[2])
|
||||
texture = 52;
|
||||
|
||||
if(texture == 18 && b2[0] && !b2[1])
|
||||
texture = 37;
|
||||
if(texture == 33 && !b2[0] && b2[2])
|
||||
texture = 36;
|
||||
if(texture == 35 && b2[3] && !b2[1])
|
||||
texture = 55;
|
||||
if(texture == 50 && !b2[3] && b2[2])
|
||||
texture = 54;
|
||||
|
||||
|
||||
if(texture == 34 && b2[0] && b2[1] && b2[2] && b2[3])
|
||||
texture = 58;
|
||||
|
||||
if(texture == 34 && !b2[0] && b2[1] && b2[2] && b2[3])
|
||||
texture = 9;
|
||||
if(texture == 34 && b2[0] && !b2[1] && b2[2] && b2[3])
|
||||
texture = 25;
|
||||
if(texture == 34 && b2[0] && b2[1] && !b2[2] && b2[3])
|
||||
texture = 8;
|
||||
if(texture == 34 && b2[0] && b2[1] && b2[2] && !b2[3])
|
||||
texture = 24;
|
||||
|
||||
if(texture == 34 && b2[0] && b2[1] && !b2[2] && !b2[3])
|
||||
texture = 11;
|
||||
if(texture == 34 && !b2[0] && !b2[1] && b2[2] && b2[3])
|
||||
texture = 26;
|
||||
if(texture == 34 && !b2[0] && b2[1] && !b2[2] && b2[3])
|
||||
texture = 27;
|
||||
if(texture == 34 && b2[0] && !b2[1] && b2[2] && !b2[3])
|
||||
texture = 10;
|
||||
|
||||
if(texture == 34 && b2[0] && !b2[1] && !b2[2] && b2[3])
|
||||
texture = 42;
|
||||
if(texture == 34 && !b2[0] && b2[1] && b2[2] && !b2[3])
|
||||
texture = 43;
|
||||
|
||||
if(texture == 34 && b2[0] && !b2[1] && !b2[2] && !b2[3])
|
||||
texture = 40;
|
||||
if(texture == 34 && !b2[0] && b2[1] && !b2[2] && !b2[3])
|
||||
texture = 41;
|
||||
if(texture == 34 && !b2[0] && !b2[1] && b2[2] && !b2[3])
|
||||
texture = 56;
|
||||
if(texture == 34 && !b2[0] && !b2[1] && !b2[2] && b2[3])
|
||||
texture = 57;
|
||||
return texture;
|
||||
}
|
||||
|
||||
private static boolean isConnected(IBlockAccess world, int x, int y, int z, int side, Block block, int meta)
|
||||
{
|
||||
int x2 = x, y2 = y, z2 = z;
|
||||
|
||||
switch(side)
|
||||
{
|
||||
case 0:
|
||||
y2--;
|
||||
break;
|
||||
case 1:
|
||||
y2++;
|
||||
break;
|
||||
case 2:
|
||||
z2--;
|
||||
break;
|
||||
case 3:
|
||||
z2++;
|
||||
break;
|
||||
case 4:
|
||||
x2--;
|
||||
break;
|
||||
case 5:
|
||||
x2++;
|
||||
break;
|
||||
}
|
||||
|
||||
return getBlockOrFacade(world, x, y, z, side).equals(block) && getBlockOrFacadeMetadata(world, x, y, z, side) == meta && (!getBlockOrFacade(world, x2, y2, z2, side).equals(block) || getBlockOrFacadeMetadata(world, x2, y2, z2, side) != meta);
|
||||
}
|
||||
|
||||
private static int getBlockOrFacadeMetadata(IBlockAccess world, int x, int y, int z, int side) {
|
||||
Block blk = world.getBlock(x, y, z);
|
||||
if(blk instanceof IFacade) {
|
||||
return ((IFacade)blk).getFacadeMetadata(world, x, y, z, side);
|
||||
}
|
||||
return world.getBlockMetadata(x, y, z);
|
||||
}
|
||||
|
||||
private static Block getBlockOrFacade(IBlockAccess world, int x, int y, int z, int side) {
|
||||
Block blk = world.getBlock(x, y, z);
|
||||
if(blk instanceof IFacade) {
|
||||
blk = ((IFacade)blk).getFacade(world, x, y, z, side);
|
||||
}
|
||||
return blk;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.entity.RenderItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.client.IItemRenderer;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class ItemChiselRenderer implements IItemRenderer
|
||||
{
|
||||
RenderBlocks renderBlock = new RenderBlocks();
|
||||
RenderItem renderItem = new RenderItem();
|
||||
|
||||
@Override
|
||||
public boolean handleRenderType(ItemStack item, ItemRenderType type)
|
||||
{
|
||||
return type == IItemRenderer.ItemRenderType.INVENTORY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderItem(ItemRenderType type, ItemStack stack, Object... data)
|
||||
{
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
|
||||
renderItem.renderItemIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().renderEngine, stack, 0, 0);
|
||||
|
||||
if(stack.stackTagCompound == null) return;
|
||||
|
||||
ItemStack chiselTarget = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("chiselTarget"));
|
||||
if(chiselTarget == null) return;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
GL11.glScalef(0.65f, 0.65f, 0.65f);
|
||||
GL11.glTranslatef(-8f, -8f, 0.0f);
|
||||
|
||||
renderItem.renderItemIntoGUI(Minecraft.getMinecraft().fontRenderer, Minecraft.getMinecraft().renderEngine, chiselTarget, 8, 8);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,377 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class RenderBlocksCTM extends RenderBlocks
|
||||
{
|
||||
|
||||
RenderBlocksCTM()
|
||||
{
|
||||
super();
|
||||
|
||||
resetVertices();
|
||||
}
|
||||
|
||||
Tessellator tessellator;
|
||||
double[] X = new double[26];
|
||||
double[] Y = new double[26];
|
||||
double[] Z = new double[26];
|
||||
double[] U = new double[26];
|
||||
double[] V = new double[26];
|
||||
int[] L = new int[26];
|
||||
float[] R = new float[26];
|
||||
float[] G = new float[26];
|
||||
float[] B = new float[26];
|
||||
TextureSubmap submap;
|
||||
TextureSubmap submapSmall;
|
||||
RenderBlocks rendererOld;
|
||||
|
||||
int bx, by, bz;
|
||||
|
||||
@Override
|
||||
public boolean renderStandardBlock(Block block, int x, int y, int z)
|
||||
{
|
||||
bx = x;
|
||||
by = y;
|
||||
bz = z;
|
||||
|
||||
tessellator = Tessellator.instance;
|
||||
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
|
||||
|
||||
tessellator.addTranslation(x, y, z);
|
||||
|
||||
boolean res = super.renderStandardBlock(block, x, y, z);
|
||||
|
||||
tessellator.addTranslation(-x, -y, -z);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void setupSides(int a, int b, int c, int d, int xa, int xb, int xc, int xd, int e)
|
||||
{
|
||||
L[a] = brightnessBottomLeft;
|
||||
L[b] = brightnessBottomRight;
|
||||
L[c] = brightnessTopRight;
|
||||
L[d] = brightnessTopLeft;
|
||||
L[e] = (brightnessBottomLeft + brightnessTopLeft + brightnessTopRight + brightnessBottomRight) / 4;
|
||||
L[xa] = (L[a] + L[b]) / 2;
|
||||
L[xb] = (L[b] + L[c]) / 2;
|
||||
L[xc] = (L[c] + L[d]) / 2;
|
||||
L[xd] = (L[d] + L[a]) / 2;
|
||||
|
||||
R[a] = colorRedBottomLeft;
|
||||
R[b] = colorRedBottomRight;
|
||||
R[c] = colorRedTopRight;
|
||||
R[d] = colorRedTopLeft;
|
||||
R[e] = (colorRedBottomLeft + colorRedTopLeft + colorRedTopRight + colorRedBottomRight) / 4;
|
||||
R[xa] = (R[a] + R[b]) / 2;
|
||||
R[xb] = (R[b] + R[c]) / 2;
|
||||
R[xc] = (R[c] + R[d]) / 2;
|
||||
R[xd] = (R[d] + R[a]) / 2;
|
||||
|
||||
G[a] = colorGreenBottomLeft;
|
||||
G[b] = colorGreenBottomRight;
|
||||
G[c] = colorGreenTopRight;
|
||||
G[d] = colorGreenTopLeft;
|
||||
G[e] = (colorGreenBottomLeft + colorGreenTopLeft + colorGreenTopRight + colorGreenBottomRight) / 4;
|
||||
G[xa] = (G[a] + G[b]) / 2;
|
||||
G[xb] = (G[b] + G[c]) / 2;
|
||||
G[xc] = (G[c] + G[d]) / 2;
|
||||
G[xd] = (G[d] + G[a]) / 2;
|
||||
|
||||
B[a] = colorBlueBottomLeft;
|
||||
B[b] = colorBlueBottomRight;
|
||||
B[c] = colorBlueTopRight;
|
||||
B[d] = colorBlueTopLeft;
|
||||
B[e] = (colorBlueBottomLeft + colorBlueTopLeft + colorBlueTopRight + colorBlueBottomRight) / 4;
|
||||
B[xa] = (B[a] + B[b]) / 2;
|
||||
B[xb] = (B[b] + B[c]) / 2;
|
||||
B[xc] = (B[c] + B[d]) / 2;
|
||||
B[xd] = (B[d] + B[a]) / 2;
|
||||
}
|
||||
|
||||
void side(int a, int b, int c, int d, int iconIndex, boolean flip)
|
||||
{
|
||||
IIcon icon = iconIndex >= 16 ? submapSmall.icons[iconIndex - 16] : submap.icons[iconIndex];
|
||||
|
||||
double u0 = icon.getMaxU();
|
||||
double u1 = icon.getMinU();
|
||||
double v0 = icon.getMaxV();
|
||||
double v1 = icon.getMinV();
|
||||
|
||||
U[a] = flip ? u1 : u1;
|
||||
U[b] = flip ? u0 : u1;
|
||||
U[c] = flip ? u0 : u0;
|
||||
U[d] = flip ? u1 : u0;
|
||||
|
||||
V[a] = flip ? v1 : v1;
|
||||
V[b] = flip ? v1 : v0;
|
||||
V[c] = flip ? v0 : v0;
|
||||
V[d] = flip ? v0 : v1;
|
||||
|
||||
vert(a);
|
||||
vert(b);
|
||||
vert(c);
|
||||
vert(d);
|
||||
}
|
||||
|
||||
void vert(int index)
|
||||
{
|
||||
if(enableAO)
|
||||
{
|
||||
tessellator.setColorOpaque_F(R[index], G[index], B[index]);
|
||||
tessellator.setBrightness(L[index]);
|
||||
}
|
||||
|
||||
tessellator.addVertexWithUV(X[index], Y[index], Z[index], U[index], V[index]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
if(rendererOld != null && rendererOld.hasOverrideBlockTexture())
|
||||
{
|
||||
IIcon i = rendererOld.overrideBlockTexture;
|
||||
|
||||
tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMaxU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMaxU(), i.getMinV());
|
||||
} else
|
||||
{
|
||||
int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 4);
|
||||
|
||||
setupSides(1, 0, 4, 5, 14, 19, 17, 23, 9);
|
||||
side(1, 14, 9, 23, tex[0], false);
|
||||
side(23, 9, 17, 5, tex[1], false);
|
||||
side(9, 19, 4, 17, tex[3], false);
|
||||
side(14, 0, 19, 9, tex[2], false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
if(rendererOld != null && rendererOld.hasOverrideBlockTexture())
|
||||
{
|
||||
IIcon i = rendererOld.overrideBlockTexture;
|
||||
|
||||
tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMinU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMinU(), i.getMinV());
|
||||
} else
|
||||
{
|
||||
int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 5);
|
||||
|
||||
setupSides(3, 2, 6, 7, 15, 25, 16, 21, 11);
|
||||
side(11, 21, 3, 15, tex[3], false);
|
||||
side(16, 7, 21, 11, tex[2], false);
|
||||
side(25, 11, 15, 2, tex[1], false);
|
||||
side(6, 16, 11, 25, tex[0], false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
if(rendererOld != null && rendererOld.hasOverrideBlockTexture())
|
||||
{
|
||||
IIcon i = rendererOld.overrideBlockTexture;
|
||||
|
||||
tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMaxU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV());
|
||||
} else
|
||||
{
|
||||
int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 2);
|
||||
|
||||
setupSides(2, 3, 0, 1, 15, 18, 14, 22, 8);
|
||||
side(2, 15, 8, 22, tex[0], false);
|
||||
side(15, 3, 18, 8, tex[2], false);
|
||||
side(8, 18, 0, 14, tex[3], false);
|
||||
side(22, 8, 14, 1, tex[1], false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
if(rendererOld != null && rendererOld.hasOverrideBlockTexture())
|
||||
{
|
||||
IIcon i = rendererOld.overrideBlockTexture;
|
||||
|
||||
tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMinU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMinU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV());
|
||||
} else
|
||||
{
|
||||
int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 3);
|
||||
|
||||
setupSides(4, 7, 6, 5, 20, 16, 24, 17, 10);
|
||||
side(17, 4, 20, 10, tex[2], false);
|
||||
side(5, 17, 10, 24, tex[0], false);
|
||||
side(24, 10, 16, 6, tex[1], false);
|
||||
side(10, 20, 7, 16, tex[3], false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
if(rendererOld != null && rendererOld.hasOverrideBlockTexture())
|
||||
{
|
||||
IIcon i = rendererOld.overrideBlockTexture;
|
||||
|
||||
tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMinU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMaxU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV());
|
||||
} else
|
||||
{
|
||||
int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 0);
|
||||
|
||||
setupSides(0, 3, 7, 4, 18, 21, 20, 19, 13);
|
||||
side(13, 21, 7, 20, tex[3], true);
|
||||
side(19, 13, 20, 4, tex[2], true);
|
||||
side(0, 18, 13, 19, tex[0], true);
|
||||
side(18, 3, 21, 13, tex[1], true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
if(rendererOld != null && rendererOld.hasOverrideBlockTexture())
|
||||
{
|
||||
IIcon i = rendererOld.overrideBlockTexture;
|
||||
|
||||
tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV());
|
||||
tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMinU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMaxV());
|
||||
tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV());
|
||||
} else
|
||||
{
|
||||
int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 1);
|
||||
|
||||
setupSides(2, 1, 5, 6, 22, 23, 24, 25, 12);
|
||||
side(12, 24, 6, 25, tex[3], false);
|
||||
side(22, 12, 25, 2, tex[1], false);
|
||||
side(1, 23, 12, 22, tex[0], false);
|
||||
side(23, 5, 24, 12, tex[2], false);
|
||||
}
|
||||
}
|
||||
|
||||
void resetVertices()
|
||||
{
|
||||
X[0] = 0;
|
||||
Z[0] = 0;
|
||||
Y[0] = 0;
|
||||
|
||||
X[1] = 0;
|
||||
Z[1] = 0;
|
||||
Y[1] = 1;
|
||||
|
||||
X[2] = 1;
|
||||
Z[2] = 0;
|
||||
Y[2] = 1;
|
||||
|
||||
X[3] = 1;
|
||||
Z[3] = 0;
|
||||
Y[3] = 0;
|
||||
|
||||
X[4] = 0;
|
||||
Z[4] = 1;
|
||||
Y[4] = 0;
|
||||
|
||||
X[5] = 0;
|
||||
Z[5] = 1;
|
||||
Y[5] = 1;
|
||||
|
||||
X[6] = 1;
|
||||
Z[6] = 1;
|
||||
Y[6] = 1;
|
||||
|
||||
X[7] = 1;
|
||||
Z[7] = 1;
|
||||
Y[7] = 0;
|
||||
|
||||
X[8] = 0.5;
|
||||
Z[8] = 0;
|
||||
Y[8] = 0.5;
|
||||
|
||||
X[9] = 0;
|
||||
Z[9] = 0.5;
|
||||
Y[9] = 0.5;
|
||||
|
||||
X[10] = 0.5;
|
||||
Z[10] = 1;
|
||||
Y[10] = 0.5;
|
||||
|
||||
X[11] = 1;
|
||||
Z[11] = 0.5;
|
||||
Y[11] = 0.5;
|
||||
|
||||
X[12] = 0.5;
|
||||
Z[12] = 0.5;
|
||||
Y[12] = 1;
|
||||
|
||||
X[13] = 0.5;
|
||||
Z[13] = 0.5;
|
||||
Y[13] = 0;
|
||||
|
||||
X[14] = 0;
|
||||
Z[14] = 0;
|
||||
Y[14] = 0.5;
|
||||
|
||||
X[15] = 1;
|
||||
Z[15] = 0;
|
||||
Y[15] = 0.5;
|
||||
|
||||
X[16] = 1;
|
||||
Z[16] = 1;
|
||||
Y[16] = 0.5;
|
||||
|
||||
X[17] = 0;
|
||||
Z[17] = 1;
|
||||
Y[17] = 0.5;
|
||||
|
||||
X[18] = 0.5;
|
||||
Z[18] = 0;
|
||||
Y[18] = 0;
|
||||
|
||||
X[19] = 0;
|
||||
Z[19] = 0.5;
|
||||
Y[19] = 0;
|
||||
|
||||
X[20] = 0.5;
|
||||
Z[20] = 1;
|
||||
Y[20] = 0;
|
||||
|
||||
X[21] = 1;
|
||||
Z[21] = 0.5;
|
||||
Y[21] = 0;
|
||||
|
||||
X[22] = 0.5;
|
||||
Z[22] = 0;
|
||||
Y[22] = 1;
|
||||
|
||||
X[23] = 0;
|
||||
Z[23] = 0.5;
|
||||
Y[23] = 1;
|
||||
|
||||
X[24] = 0.5;
|
||||
Z[24] = 1;
|
||||
Y[24] = 1;
|
||||
|
||||
X[25] = 1;
|
||||
Z[25] = 0.5;
|
||||
Y[25] = 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class RenderBlocksCTMCarpet extends RenderBlocksCTM
|
||||
{
|
||||
RenderBlocksCTMCarpet()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
void resetVertices()
|
||||
{
|
||||
super.resetVertices();
|
||||
|
||||
for(int i = 0; i < Y.length; i++)
|
||||
{
|
||||
Y[i] /= 16;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
rendererOld.renderFaceXNeg(block, 0, 0, 0, submapSmall.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
rendererOld.renderFaceXPos(block, 0, 0, 0, submapSmall.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
rendererOld.renderFaceZNeg(block, 0, 0, 0, submapSmall.icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
rendererOld.renderFaceZPos(block, 0, 0, 0, submapSmall.icon);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class RenderBlocksColumn extends RenderBlocks
|
||||
{
|
||||
TextureSubmap submap;
|
||||
IIcon iconTop;
|
||||
IIcon sides[] = new IIcon[6];
|
||||
|
||||
RenderBlocksColumn()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
boolean connected(IBlockAccess world, int x, int y, int z, Block block, int meta)
|
||||
{
|
||||
return world.getBlock(x, y, z).equals(block) && world.getBlockMetadata(x, y, z) == meta;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderStandardBlock(Block block, int x, int y, int z)
|
||||
{
|
||||
int metadata = blockAccess.getBlockMetadata(x, y, z);
|
||||
|
||||
boolean yp = connected(blockAccess, x, y + 1, z, block, metadata);
|
||||
boolean yn = connected(blockAccess, x, y - 1, z, block, metadata);
|
||||
|
||||
if(yp || yn)
|
||||
{
|
||||
sides[0] = iconTop;
|
||||
sides[1] = iconTop;
|
||||
|
||||
if(yp && yn)
|
||||
sides[2] = submap.icons[2];
|
||||
else if(yp)
|
||||
sides[2] = submap.icons[3];
|
||||
else
|
||||
sides[2] = submap.icons[1];
|
||||
|
||||
sides[3] = sides[4] = sides[5] = sides[2];
|
||||
} else
|
||||
{
|
||||
boolean xp = connected(blockAccess, x + 1, y, z, block, metadata);
|
||||
boolean xn = connected(blockAccess, x - 1, y, z, block, metadata);
|
||||
|
||||
if(xp && (connected(blockAccess, x + 1, y + 1, z, block, metadata) || connected(blockAccess, x + 1, y - 1, z, block, metadata)))
|
||||
xp = false;
|
||||
if(xn && (connected(blockAccess, x - 1, y + 1, z, block, metadata) || connected(blockAccess, x - 1, y - 1, z, block, metadata)))
|
||||
xn = false;
|
||||
|
||||
if(xp || xn)
|
||||
{
|
||||
uvRotateEast = 2;
|
||||
uvRotateWest = 1;
|
||||
uvRotateTop = 1;
|
||||
uvRotateBottom = 1;
|
||||
|
||||
sides[4] = iconTop;
|
||||
sides[5] = iconTop;
|
||||
|
||||
if(xp && xn)
|
||||
sides[0] = submap.icons[2];
|
||||
else if(xp)
|
||||
sides[0] = submap.icons[3];
|
||||
else
|
||||
sides[0] = submap.icons[1];
|
||||
|
||||
sides[1] = sides[2] = sides[3] = sides[0];
|
||||
} else
|
||||
{
|
||||
boolean zp = connected(blockAccess, x, y, z + 1, block, metadata);
|
||||
boolean zn = connected(blockAccess, x, y, z - 1, block, metadata);
|
||||
|
||||
if(zp && (connected(blockAccess, x, y + 1, z + 1, block, metadata) || connected(blockAccess, x, y - 1, z + 1, block, metadata)))
|
||||
zp = false;
|
||||
if(zp && (connected(blockAccess, x + 1, y, z + 1, block, metadata) || connected(blockAccess, x - 1, y, z + 1, block, metadata)))
|
||||
zp = false;
|
||||
if(zn && (connected(blockAccess, x, y + 1, z - 1, block, metadata) || connected(blockAccess, x, y - 1, z - 1, block, metadata)))
|
||||
zn = false;
|
||||
if(zn && (connected(blockAccess, x + 1, y, z - 1, block, metadata) || connected(blockAccess, x - 1, y, z - 1, block, metadata)))
|
||||
zn = false;
|
||||
|
||||
if(zp || zn)
|
||||
{
|
||||
uvRotateSouth = 1;
|
||||
uvRotateNorth = 2;
|
||||
|
||||
sides[2] = iconTop;
|
||||
sides[3] = iconTop;
|
||||
|
||||
if(zp && zn)
|
||||
sides[0] = submap.icons[2];
|
||||
else if(zp)
|
||||
sides[0] = submap.icons[1];
|
||||
else
|
||||
sides[0] = submap.icons[3];
|
||||
|
||||
sides[1] = sides[4] = sides[5] = sides[0];
|
||||
} else
|
||||
{
|
||||
sides[0] = sides[1] = iconTop;
|
||||
sides[2] = sides[3] = sides[4] = sides[5] = submap.icons[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
boolean flag = super.renderStandardBlock(block, x, y, z);
|
||||
|
||||
uvRotateSouth = 0;
|
||||
uvRotateEast = 0;
|
||||
uvRotateWest = 0;
|
||||
uvRotateNorth = 0;
|
||||
uvRotateTop = 0;
|
||||
uvRotateBottom = 0;
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
super.renderFaceXNeg(block, x, y, z, sides[4]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
super.renderFaceXPos(block, x, y, z, sides[5]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
super.renderFaceZNeg(block, x, y, z, sides[2]);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
super.renderFaceZPos(block, x, y, z, sides[3]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
super.renderFaceYNeg(block, x, y, z, sides[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
super.renderFaceYPos(block, x, y, z, sides[1]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,328 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class RenderBlocksEldritch extends RenderBlocks
|
||||
{
|
||||
|
||||
RenderBlocksEldritch()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
static double displacementMap[] = {
|
||||
+0.1165, -0.0352, -0.1208, +0.0906, -0.0295, +0.0302, -0.0973, +0.0548,
|
||||
-0.1077, +0.0662, -0.0932, -0.0925, -0.1161, +0.0073, -0.1084, +0.1136,
|
||||
+0.0307, +0.0316, -0.1066, -0.0237, +0.0614, -0.0864, +0.0837, +0.1218,
|
||||
+0.0502, -0.0529, -0.0942, +0.1209, -0.0418, +0.1035, +0.0066, -0.0255,
|
||||
+0.0830, -0.0361, +0.0965, +0.0646, +0.1124, +0.0890, -0.0037, +0.0467,
|
||||
+0.1025, +0.1161, +0.0014, +0.0365, +0.0755, -0.0025, +0.0739, +0.0656,
|
||||
+0.0571, -0.0813, -0.0062, -0.0904, -0.0005, +0.0612, -0.0227, +0.0138,
|
||||
-0.0899, -0.0019, -0.1047, +0.1191, -0.1197, -0.1123, +0.0999, +0.0638,
|
||||
+0.0865, +0.0029, -0.0084, +0.1132, -0.0433, +0.0115, +0.0850, +0.0439,
|
||||
+0.0748, +0.0460, -0.0441, +0.0839, +0.0162, -0.0229, +0.0774, -0.0647,
|
||||
-0.0636, -0.0709, -0.0719, -0.0194, +0.1070, -0.0466, -0.1200, -0.0996,
|
||||
-0.0298, -0.1035, -0.0006, +0.0530, -0.0939, -0.1210, +0.0176, +0.0924,
|
||||
+0.0343, -0.0777, +0.1050, -0.0729, -0.0062, -0.1107, -0.0434, -0.0042,
|
||||
+0.0232, +0.0269, +0.0709, -0.0388, +0.0342, +0.0240, -0.0192, +0.0491,
|
||||
+0.0017, -0.1240, +0.0687, -0.1160, +0.1123, -0.0332, -0.0260, +0.0476,
|
||||
-0.0049, -0.0893, -0.0243, -0.0371, -0.0230, +0.0656, +0.1080, +0.0781,
|
||||
-0.0648, +0.0082, -0.1086, -0.0451, -0.0594, -0.1155, -0.0623, -0.0152,
|
||||
+0.0131, -0.0754, +0.0607, +0.0876, -0.0657, +0.0366, -0.0981, +0.1164,
|
||||
-0.0623, +0.0181, -0.0475, +0.0722, -0.0293, +0.0486, -0.0195, +0.1041,
|
||||
+0.1011, +0.0042, -0.0045, -0.1031, +0.0110, +0.0058, +0.0083, -0.0782,
|
||||
-0.1003, -0.0082, -0.0304, -0.0971, -0.0097, -0.0208, -0.1059, -0.0239,
|
||||
-0.0385, +0.0505, +0.0537, -0.1098, -0.0022, -0.0165, -0.0027, -0.0208,
|
||||
+0.0305, +0.0592, +0.0301, +0.0055, +0.1138, -0.0338, -0.0901, +0.1015,
|
||||
+0.0061, +0.0861, -0.1057, -0.0889, -0.0972, +0.0783, -0.1052, -0.0932,
|
||||
-0.1103, +0.0497, +0.1222, -0.0146, +0.0632, -0.0240, -0.0193, +0.0676,
|
||||
-0.1128, -0.0886, +0.0926, +0.0538, -0.0175, -0.0966, -0.0369, +0.1124,
|
||||
-0.0820, -0.1013, -0.0836, -0.0981, -0.0502, +0.0573, +0.0616, -0.0458,
|
||||
+0.0294, +0.0108, -0.0782, +0.0692, +0.0234, -0.0178, -0.0171, -0.0505,
|
||||
-0.0313, +0.0538, +0.0462, -0.0758, +0.0556, -0.0023, -0.1086, -0.0100,
|
||||
-0.0897, -0.0409, -0.1161, +0.0212, +0.1229, -0.0945, +0.0341, +0.1238,
|
||||
+0.0893, -0.1189, -0.1098, -0.0125, +0.1137, -0.0202, +0.0239, -0.0408,
|
||||
+0.0920, +0.0777, -0.0085, -0.0572, -0.0293, -0.0131, +0.0272, +0.0991,
|
||||
};
|
||||
|
||||
static int dmap1 = displacementMap.length * 1 / 6;
|
||||
static int dmap2 = displacementMap.length * 2 / 6;
|
||||
static int dmap3 = displacementMap.length * 3 / 6;
|
||||
static int dmap4 = displacementMap.length * 4 / 6;
|
||||
static int dmap5 = displacementMap.length * 5 / 6;
|
||||
static int dmap = displacementMap.length;
|
||||
|
||||
Tessellator tessellator;
|
||||
double[] X = new double[14];
|
||||
double[] Y = new double[14];
|
||||
double[] Z = new double[14];
|
||||
double[] U = new double[14];
|
||||
double[] V = new double[14];
|
||||
int[] L = new int[14];
|
||||
float[] R = new float[14];
|
||||
float[] G = new float[14];
|
||||
float[] B = new float[14];
|
||||
|
||||
@Override
|
||||
public boolean renderStandardBlock(Block block, int x, int y, int z)
|
||||
{
|
||||
int index = x + y * 34573 + z * 32465781;
|
||||
if(index < 0) index = -index;
|
||||
|
||||
X[0] = x;
|
||||
Z[0] = z;
|
||||
Y[0] = y;
|
||||
|
||||
X[1] = x;
|
||||
Z[1] = z;
|
||||
Y[1] = y + 1;
|
||||
|
||||
X[2] = x + 1;
|
||||
Z[2] = z;
|
||||
Y[2] = y + 1;
|
||||
|
||||
X[3] = x + 1;
|
||||
Z[3] = z;
|
||||
Y[3] = y;
|
||||
|
||||
X[4] = x;
|
||||
Z[4] = z + 1;
|
||||
Y[4] = y;
|
||||
|
||||
X[5] = x;
|
||||
Z[5] = z + 1;
|
||||
Y[5] = y + 1;
|
||||
|
||||
X[6] = x + 1;
|
||||
Z[6] = z + 1;
|
||||
Y[6] = y + 1;
|
||||
|
||||
X[7] = x + 1;
|
||||
Z[7] = z + 1;
|
||||
Y[7] = y;
|
||||
|
||||
X[8] = x + 0.5 + displacementMap[(index + 0) % dmap];
|
||||
Z[8] = z - displacementMap[(index + 10) % dmap];
|
||||
Y[8] = y + 0.5 + displacementMap[(index + 20) % dmap];
|
||||
|
||||
X[9] = x - displacementMap[(index + 0 + dmap1) % dmap];
|
||||
Z[9] = z + 0.5 + displacementMap[(index + 10 + dmap1) % dmap];
|
||||
Y[9] = y + 0.5 + displacementMap[(index + 20 + dmap1) % dmap];
|
||||
|
||||
X[10] = x + 0.5 + displacementMap[(index + 0 + dmap2) % dmap];
|
||||
Z[10] = z + 1 + displacementMap[(index + 10 + dmap2) % dmap];
|
||||
Y[10] = y + 0.5 + displacementMap[(index + 20 + dmap2) % dmap];
|
||||
|
||||
X[11] = x + 1 + displacementMap[(index + 0 + dmap3) % dmap];
|
||||
Z[11] = z + 0.5 + displacementMap[(index + 10 + dmap3) % dmap];
|
||||
Y[11] = y + 0.5 + displacementMap[(index + 20 + dmap3) % dmap];
|
||||
|
||||
X[12] = x + 0.5 + displacementMap[(index + 0 + dmap4) % dmap];
|
||||
Z[12] = z + 0.5 + displacementMap[(index + 10 + dmap4) % dmap];
|
||||
Y[12] = y + 1;//+displacementMap[(index+20+dmap4)%dmap];
|
||||
|
||||
X[13] = x + 0.5 + displacementMap[(index + 0 + dmap5) % dmap];
|
||||
Z[13] = z + 0.5 + displacementMap[(index + 10 + dmap5) % dmap];
|
||||
Y[13] = y + 0;//+displacementMap[(index+20+dmap5)%dmap];
|
||||
|
||||
tessellator = Tessellator.instance;
|
||||
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
|
||||
|
||||
return super.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
void setupSides(IIcon icon, int a, int b, int c, int d, int e, int ta, int tb, int tc, int td)
|
||||
{
|
||||
L[a] = brightnessBottomLeft;
|
||||
L[b] = brightnessBottomRight;
|
||||
L[c] = brightnessTopRight;
|
||||
L[d] = brightnessTopLeft;
|
||||
L[e] = (brightnessBottomLeft + brightnessTopLeft + brightnessTopRight + brightnessBottomRight) / 4;
|
||||
|
||||
R[a] = colorRedBottomLeft;
|
||||
R[b] = colorRedBottomRight;
|
||||
R[c] = colorRedTopRight;
|
||||
R[d] = colorRedTopLeft;
|
||||
R[e] = (colorRedBottomLeft + colorRedTopLeft + colorRedTopRight + colorRedBottomRight) / 4;
|
||||
|
||||
G[a] = colorGreenBottomLeft;
|
||||
G[b] = colorGreenBottomRight;
|
||||
G[c] = colorGreenTopRight;
|
||||
G[d] = colorGreenTopLeft;
|
||||
G[e] = (colorGreenBottomLeft + colorGreenTopLeft + colorGreenTopRight + colorGreenBottomRight) / 4;
|
||||
|
||||
B[a] = colorBlueBottomLeft;
|
||||
B[b] = colorBlueBottomRight;
|
||||
B[c] = colorBlueTopRight;
|
||||
B[d] = colorBlueTopLeft;
|
||||
B[e] = (colorBlueBottomLeft + colorBlueTopLeft + colorBlueTopRight + colorBlueBottomRight) / 4;
|
||||
|
||||
double u0 = icon.getMaxU();
|
||||
double u1 = icon.getMinU();
|
||||
double v0 = icon.getMaxV();
|
||||
double v1 = icon.getMinV();
|
||||
|
||||
U[ta] = u0;
|
||||
U[tb] = u0;
|
||||
U[tc] = u1;
|
||||
U[td] = u1;
|
||||
U[e] = icon.getInterpolatedU(8.0D);
|
||||
|
||||
V[ta] = v0;
|
||||
V[tb] = v1;
|
||||
V[tc] = v1;
|
||||
V[td] = v0;
|
||||
V[e] = icon.getInterpolatedV(8.0D);
|
||||
}
|
||||
|
||||
void vert(int index)
|
||||
{
|
||||
if(enableAO)
|
||||
{
|
||||
tessellator.setColorOpaque_F(R[index], G[index], B[index]);
|
||||
tessellator.setBrightness(L[index]);
|
||||
}
|
||||
|
||||
tessellator.addVertexWithUV(X[index], Y[index], Z[index], U[index], V[index]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
setupSides(icon, 1, 0, 4, 5, 9, 4, 5, 1, 0);
|
||||
vert(1);
|
||||
vert(0);
|
||||
vert(9);
|
||||
vert(9);
|
||||
vert(0);
|
||||
vert(4);
|
||||
vert(9);
|
||||
vert(9);
|
||||
vert(4);
|
||||
vert(5);
|
||||
vert(9);
|
||||
vert(9);
|
||||
vert(5);
|
||||
vert(1);
|
||||
vert(9);
|
||||
vert(9);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
setupSides(icon, 3, 2, 6, 7, 11, 3, 2, 6, 7);
|
||||
vert(6);
|
||||
vert(7);
|
||||
vert(11);
|
||||
vert(11);
|
||||
vert(7);
|
||||
vert(3);
|
||||
vert(11);
|
||||
vert(11);
|
||||
vert(3);
|
||||
vert(2);
|
||||
vert(11);
|
||||
vert(11);
|
||||
vert(2);
|
||||
vert(6);
|
||||
vert(11);
|
||||
vert(11);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
setupSides(icon, 2, 3, 0, 1, 8, 0, 1, 2, 3);
|
||||
vert(0);
|
||||
vert(1);
|
||||
vert(8);
|
||||
vert(8);
|
||||
vert(1);
|
||||
vert(2);
|
||||
vert(8);
|
||||
vert(8);
|
||||
vert(2);
|
||||
vert(3);
|
||||
vert(8);
|
||||
vert(8);
|
||||
vert(3);
|
||||
vert(0);
|
||||
vert(8);
|
||||
vert(8);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
setupSides(icon, 4, 7, 6, 5, 10, 7, 6, 5, 4);
|
||||
vert(5);
|
||||
vert(4);
|
||||
vert(10);
|
||||
vert(10);
|
||||
vert(6);
|
||||
vert(5);
|
||||
vert(10);
|
||||
vert(10);
|
||||
vert(7);
|
||||
vert(6);
|
||||
vert(10);
|
||||
vert(10);
|
||||
vert(4);
|
||||
vert(7);
|
||||
vert(10);
|
||||
vert(10);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
setupSides(icon, 0, 3, 7, 4, 13, 0, 3, 7, 4);
|
||||
vert(0);
|
||||
vert(3);
|
||||
vert(13);
|
||||
vert(13);
|
||||
vert(3);
|
||||
vert(7);
|
||||
vert(13);
|
||||
vert(13);
|
||||
vert(7);
|
||||
vert(4);
|
||||
vert(13);
|
||||
vert(13);
|
||||
vert(4);
|
||||
vert(0);
|
||||
vert(13);
|
||||
vert(13);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon)
|
||||
{
|
||||
setupSides(icon, 2, 1, 5, 6, 12, 2, 1, 5, 6);
|
||||
|
||||
vert(2);
|
||||
vert(1);
|
||||
vert(12);
|
||||
vert(12);
|
||||
vert(1);
|
||||
vert(5);
|
||||
vert(12);
|
||||
vert(12);
|
||||
vert(5);
|
||||
vert(6);
|
||||
vert(12);
|
||||
vert(12);
|
||||
vert(6);
|
||||
vert(2);
|
||||
vert(12);
|
||||
vert(12);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
public class TextureSubmap
|
||||
{
|
||||
public int width, height;
|
||||
public IIcon icon;
|
||||
public IIcon icons[];
|
||||
|
||||
public TextureSubmap(IIcon i, int w, int h)
|
||||
{
|
||||
icon = i;
|
||||
width = w;
|
||||
height = h;
|
||||
icons = new IIcon[width * height];
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void TexturesStitched(TextureStitchEvent.Post event)
|
||||
{
|
||||
|
||||
for(int x = 0; x < width; x++)
|
||||
{
|
||||
for(int y = 0; y < height; y++)
|
||||
{
|
||||
icons[y * width + x] = new TextureVirtual(icon, width, height, x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package info.jbcs.minecraft.chisel.client.render;
|
||||
|
||||
import net.minecraft.util.IIcon;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public class TextureVirtual implements IIcon
|
||||
{
|
||||
int ox, oy;
|
||||
float u0, u1, v0, v1;
|
||||
String name;
|
||||
IIcon icon;
|
||||
|
||||
TextureVirtual(IIcon parent, int w, int h, int x, int y)
|
||||
{
|
||||
icon = parent;
|
||||
|
||||
u0 = icon.getInterpolatedU(16.0 * (x) / w);
|
||||
u1 = icon.getInterpolatedU(16.0 * (x + 1) / w);
|
||||
v0 = icon.getInterpolatedV(16.0 * (y) / h);
|
||||
v1 = icon.getInterpolatedV(16.0 * (y + 1) / h);
|
||||
|
||||
name = icon.getIconName() + "|" + x + "." + y;
|
||||
|
||||
ox = icon.getIconWidth();
|
||||
oy = icon.getIconHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMinU()
|
||||
{
|
||||
return u0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMaxU()
|
||||
{
|
||||
return u1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getInterpolatedU(double d0)
|
||||
{
|
||||
return (float) (u0 + (u1 - u0) * d0 / 16.0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMinV()
|
||||
{
|
||||
return v0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMaxV()
|
||||
{
|
||||
return v1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getInterpolatedV(double d0)
|
||||
{
|
||||
return (float) (v0 + (v1 - v0) * d0 / 16.0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public String getIconName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getIconWidth()
|
||||
{
|
||||
return ox;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getIconHeight()
|
||||
{
|
||||
return oy;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package info.jbcs.minecraft.chisel.entity;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.ChiselBlocks;
|
||||
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.projectile.EntityThrowable;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityBallOMoss extends EntityThrowable
|
||||
{
|
||||
|
||||
public EntityBallOMoss(World par1World)
|
||||
{
|
||||
super(par1World);
|
||||
}
|
||||
|
||||
public EntityBallOMoss(World par1World, EntityLivingBase par2EntityLiving)
|
||||
{
|
||||
super(par1World, par2EntityLiving);
|
||||
}
|
||||
|
||||
public EntityBallOMoss(World par1World, double x, double y, double z)
|
||||
{
|
||||
super(par1World, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onImpact(MovingObjectPosition movingobjectposition)
|
||||
{
|
||||
int x = movingobjectposition.blockX;
|
||||
int y = movingobjectposition.blockY;
|
||||
int z = movingobjectposition.blockZ;
|
||||
|
||||
switch(movingobjectposition.sideHit)
|
||||
{
|
||||
case 0:
|
||||
y--;
|
||||
break;
|
||||
case 1:
|
||||
y++;
|
||||
break;
|
||||
case 2:
|
||||
z--;
|
||||
break;
|
||||
case 3:
|
||||
z++;
|
||||
break;
|
||||
case 4:
|
||||
x--;
|
||||
break;
|
||||
case 5:
|
||||
x++;
|
||||
break;
|
||||
}
|
||||
|
||||
setDead();
|
||||
|
||||
if(worldObj.isRemote)
|
||||
{
|
||||
worldObj.playSound(x, y, z, Chisel.MOD_ID+":random.squash", 1.0f, 1.0f, false);
|
||||
|
||||
for(int i = 0; i < 32; i++)
|
||||
GeneralChiselClient.spawnBallOMossFX(worldObj, posX, posY, posZ);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int radius = 5;
|
||||
int falloff = 3;
|
||||
|
||||
for(int xx = -radius; xx < radius; xx++)
|
||||
{
|
||||
for(int yy = -radius; yy < radius; yy++)
|
||||
{
|
||||
for(int zz = -radius; zz < radius; zz++)
|
||||
{
|
||||
double dist = (xx < 0 ? -xx : xx) + (yy < 0 ? -yy : yy) + (zz < 0 ? -zz : zz);
|
||||
|
||||
if(!(dist < falloff || General.rand.nextInt(radius * 3 - falloff) >= dist * 2))
|
||||
continue;
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
turnToMoss(worldObj, x + xx, y + yy, z + zz);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void turnToMoss(World world, int x, int y, int z)
|
||||
{
|
||||
Block block = world.getBlock(x, y, z);
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
Block resBlock = block;
|
||||
int resMeta = meta;
|
||||
|
||||
if(block.equals(Blocks.cobblestone))
|
||||
{
|
||||
resBlock = Blocks.mossy_cobblestone;
|
||||
} else if(block.equals(Blocks.cobblestone_wall) && meta == 0)
|
||||
{
|
||||
resMeta = 1;
|
||||
} else if(block.equals(ChiselBlocks.blockCobblestone))
|
||||
{
|
||||
resBlock = ChiselBlocks.blockCobblestoneMossy;
|
||||
} else if(block.equals(ChiselBlocks.blockTemple))
|
||||
{
|
||||
resBlock = ChiselBlocks.blockTempleMossy;
|
||||
} else if(block.equals(Blocks.stonebrick))
|
||||
{
|
||||
resMeta = 1;
|
||||
}
|
||||
|
||||
if(resBlock.equals(block) && resMeta == meta)
|
||||
return;
|
||||
world.setBlock(x, y, z, resBlock, resMeta, 3);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
package info.jbcs.minecraft.chisel.entity;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.block.BlockSnakestoneObsidian;
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public class EntityBallOMossFX extends EntityFX
|
||||
{
|
||||
BlockSnakestoneObsidian block;
|
||||
double tx, ty, tz;
|
||||
double speed;
|
||||
|
||||
float u0, u1, v0, v1;
|
||||
IIcon icon;
|
||||
IIcon iconPlus = new IIcon()
|
||||
{
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getIconWidth()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getIconHeight()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMinU()
|
||||
{
|
||||
return u0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMaxU()
|
||||
{
|
||||
return u1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getInterpolatedU(double d0)
|
||||
{
|
||||
return (float) (u0 + d0 * (u1 - u0) / 16.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMinV()
|
||||
{
|
||||
return v0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getMaxV()
|
||||
{
|
||||
return v1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getInterpolatedV(double d0)
|
||||
{
|
||||
return (float) (v0 + d0 * (v1 - v0) / 16.0f);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public String getIconName()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
public EntityBallOMossFX(World world, double x, double y, double z)
|
||||
{
|
||||
super(world, x, y + 0.5, z, 0, 0, 0);
|
||||
|
||||
particleScale = 0.5f + 0.5f * General.rand.nextFloat();
|
||||
speed = 0.4 + 0.4 * General.rand.nextDouble();
|
||||
|
||||
particleMaxAge = (int) (General.rand.nextDouble() * 10.0) + 5;
|
||||
if(General.rand.nextInt(10) == 0)
|
||||
particleMaxAge += General.rand.nextDouble() * 40.0;
|
||||
|
||||
motionX = (General.rand.nextDouble() - 0.5) * 0.7;
|
||||
motionY = (General.rand.nextDouble() * 0.5) * 0.7;
|
||||
motionZ = (General.rand.nextDouble() - 0.5) * 0.7;
|
||||
particleGravity = 2.0f;
|
||||
|
||||
// setParticleIcon(block.particles[General.rand.nextInt(block.particles.length)]);
|
||||
|
||||
icon = Chisel.itemBallOMoss.getIconFromDamage(0);
|
||||
float width = 4.0f + General.rand.nextFloat() * 8.0f;
|
||||
float uu = General.rand.nextFloat() * (16.0f - width);
|
||||
float vv = General.rand.nextFloat() * (16.0f - width);
|
||||
u0 = icon.getInterpolatedU(uu);
|
||||
u1 = icon.getInterpolatedU(uu + width);
|
||||
v0 = icon.getInterpolatedV(vv);
|
||||
v1 = icon.getInterpolatedV(vv + width);
|
||||
|
||||
setParticleIcon(iconPlus);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFXLayer()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(Tessellator tessellator, float partialTick, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY)
|
||||
{
|
||||
GL11.glDepthMask(false);
|
||||
GL11.glEnable(3042);
|
||||
GL11.glBlendFunc(770, 771);
|
||||
super.renderParticle(tessellator, partialTick, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
super.onUpdate();
|
||||
|
||||
double remaining = particleMaxAge - particleAge;
|
||||
|
||||
if(remaining < 5)
|
||||
{
|
||||
particleAlpha = (float) (remaining / 5.0);
|
||||
} else
|
||||
{
|
||||
particleAlpha = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
package info.jbcs.minecraft.chisel.entity;
|
||||
|
||||
import info.jbcs.minecraft.chisel.Chisel;
|
||||
import info.jbcs.minecraft.chisel.ChiselBlocks;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.projectile.EntityThrowable;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityCloudInABottle extends EntityThrowable
|
||||
{
|
||||
Random rand = new Random();
|
||||
|
||||
public EntityCloudInABottle(World par1World)
|
||||
{
|
||||
super(par1World);
|
||||
}
|
||||
|
||||
public EntityCloudInABottle(World par1World, EntityLivingBase par2EntityLiving)
|
||||
{
|
||||
super(par1World, par2EntityLiving);
|
||||
}
|
||||
|
||||
public EntityCloudInABottle(World par1World, double x, double y, double z)
|
||||
{
|
||||
super(par1World, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onImpact(MovingObjectPosition movingobjectposition)
|
||||
{
|
||||
if(worldObj.isRemote)
|
||||
return;
|
||||
|
||||
int x = movingobjectposition.blockX;
|
||||
int y = movingobjectposition.blockY;
|
||||
int z = movingobjectposition.blockZ;
|
||||
|
||||
switch(movingobjectposition.sideHit)
|
||||
{
|
||||
case 0:
|
||||
y--;
|
||||
break;
|
||||
case 1:
|
||||
y++;
|
||||
break;
|
||||
case 2:
|
||||
z--;
|
||||
break;
|
||||
case 3:
|
||||
z++;
|
||||
break;
|
||||
case 4:
|
||||
x--;
|
||||
break;
|
||||
case 5:
|
||||
x++;
|
||||
break;
|
||||
}
|
||||
|
||||
generate(worldObj, rand, x, y, z, 40);
|
||||
|
||||
worldObj.playAuxSFX(2002, (int) Math.round(this.posX), (int) Math.round(this.posY), (int) Math.round(this.posZ), 2);
|
||||
setDead();
|
||||
}
|
||||
|
||||
public boolean generate(World world, Random random, int gx, int gy, int gz, int numberOfBlocks)
|
||||
{
|
||||
int X[] = new int[9];
|
||||
int Y[] = new int[9];
|
||||
int Z[] = new int[9];
|
||||
|
||||
for(int dir = 0; dir < 9; dir++)
|
||||
{
|
||||
X[dir] = gx;
|
||||
Y[dir] = gy;
|
||||
Z[dir] = gz;
|
||||
}
|
||||
int count = 0;
|
||||
while(count < numberOfBlocks)
|
||||
{
|
||||
for(int dir = 0; dir < 9; dir++)
|
||||
{
|
||||
if(count >= numberOfBlocks)
|
||||
break;
|
||||
|
||||
int dx = dir % 3 - 1;
|
||||
int dz = dir / 3 - 1;
|
||||
|
||||
if(dx == 0 && dz == 0)
|
||||
continue;
|
||||
|
||||
X[dir] += random.nextInt(3) - 1 + dx;
|
||||
Z[dir] += random.nextInt(3) - 1 + dz;
|
||||
Y[dir] += random.nextInt(2) * (random.nextInt(3) - 1);
|
||||
|
||||
int x = X[dir];
|
||||
int y = Y[dir];
|
||||
int z = Z[dir];
|
||||
|
||||
for(int j2 = x; j2 < x + random.nextInt(4) + 1; j2++)
|
||||
{
|
||||
for(int k2 = y; k2 < y + random.nextInt(1) + 2; k2++)
|
||||
{
|
||||
for(int l2 = z; l2 < z + random.nextInt(4) + 1; l2++)
|
||||
{
|
||||
if(world.getBlock(j2, k2, l2).isAir(world, j2, k2, l2) && Math.abs(j2 - x) + Math.abs(k2 - y) + Math.abs(l2 - z) < 4 * 1 + random.nextInt(2))
|
||||
{
|
||||
world.setBlock(j2, k2, l2, ChiselBlocks.blockCloud);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//System.out.println("Created " + count + " cloud blocks.");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package info.jbcs.minecraft.chisel.entity;
|
||||
|
||||
import info.jbcs.minecraft.chisel.block.BlockHolystone;
|
||||
import info.jbcs.minecraft.utilities.General;
|
||||
import net.minecraft.client.particle.EntityFX;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityHolystoneFX extends EntityFX
|
||||
{
|
||||
float initialScale;
|
||||
float angleOffset;
|
||||
static final float fadetime = 20f;
|
||||
|
||||
public EntityHolystoneFX(World world, BlockHolystone block, double x, double y, double z)
|
||||
{
|
||||
super(world, x, y, z, 0, 0, 0);
|
||||
|
||||
initialScale = 1.0f + 1.0f * General.rand.nextFloat();
|
||||
angleOffset = rand.nextFloat() * 360;
|
||||
|
||||
particleMaxAge = (int) (Math.random() * 10.0D) + 80;
|
||||
|
||||
setPosition(x, y, z);
|
||||
prevPosX = posX;
|
||||
prevPosY = posY;
|
||||
prevPosZ = posZ;
|
||||
|
||||
noClip = true;
|
||||
|
||||
setParticleIcon(block.iconStar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFXLayer()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderParticle(Tessellator tessellator, float partialTick, float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY)
|
||||
{
|
||||
particleScale = 0.25f + initialScale * (float) Math.sin((particleAge + angleOffset) / 180.f);
|
||||
|
||||
if(particleAge < fadetime)
|
||||
particleAlpha = particleAge / fadetime;
|
||||
else if(particleAge + fadetime >= particleMaxAge)
|
||||
particleAlpha = (particleMaxAge - particleAge) / fadetime;
|
||||
else
|
||||
particleAlpha = 1.0f;
|
||||
|
||||
super.renderParticle(tessellator, partialTick, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate()
|
||||
{
|
||||
if(particleAge++ >= particleMaxAge)
|
||||
{
|
||||
setDead();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loaded 100 of 1764 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user