mirror of
https://github.com/GTNewHorizons/EnderIO.git
synced 2026-11-15 01:25:13 +00:00
Compare commits
16
Commits
2.3.1.31
...
2.3.1.34-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9176fdc020 | ||
|
|
b6614df9b3 | ||
|
|
7e625f2bff | ||
|
|
47bd7efd19 | ||
|
|
4f8336dc5b | ||
|
|
b19a4c98b8 | ||
|
|
5f4a9794b0 | ||
|
|
6a00ab5d88 | ||
|
|
da6e0c5ba0 | ||
|
|
edc8786d79 | ||
|
|
88d7baef0a | ||
|
|
efc8eba67b | ||
|
|
f4f2b857b7 | ||
|
|
958da172e4 | ||
|
|
3669b5a690 | ||
|
|
d46289b0e1 |
No files matched your search
@@ -0,0 +1,23 @@
|
||||
# This is the universal Text Editor Configuration
|
||||
# for all GTNewHorizons projects
|
||||
# See: https://editorconfig.org/
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.{bat,ini}]
|
||||
end_of_line = crlf
|
||||
|
||||
[*.{dtd,json,info,mcmeta,md,sh,svg,xml,xsd,xsl,yaml,yml}]
|
||||
indent_size = 2
|
||||
|
||||
[*.java]
|
||||
indent_size = 2
|
||||
ij_java_space_before_if_parentheses = false
|
||||
+50
-33
@@ -1,4 +1,4 @@
|
||||
//version: 1644612407
|
||||
//version: 1652851397
|
||||
/*
|
||||
DO NOT CHANGE THIS FILE!
|
||||
|
||||
@@ -6,12 +6,11 @@ Also, you may replace this file at any time if there is an update available.
|
||||
Please check https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/build.gradle for updates.
|
||||
*/
|
||||
|
||||
import org.gradle.internal.logging.text.StyledTextOutput
|
||||
import org.gradle.internal.logging.text.StyledTextOutputFactory
|
||||
import org.gradle.internal.logging.text.StyledTextOutput.Style
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.internal.logging.text.StyledTextOutput.Style
|
||||
import org.gradle.internal.logging.text.StyledTextOutputFactory
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@@ -45,13 +44,14 @@ plugins {
|
||||
id 'eclipse'
|
||||
id 'scala'
|
||||
id 'maven-publish'
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false
|
||||
id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false
|
||||
id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false
|
||||
id 'com.google.devtools.ksp' version '1.5.30-1.0.0' apply false
|
||||
id 'org.ajoberstar.grgit' version '4.1.1'
|
||||
id 'com.github.johnrengelman.shadow' version '4.0.4'
|
||||
id 'com.palantir.git-version' version '0.13.0' apply false
|
||||
id 'com.palantir.git-version' version '0.13.0' apply false
|
||||
id 'de.undercouch.download' version '5.0.1'
|
||||
id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false
|
||||
id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false
|
||||
}
|
||||
|
||||
if (project.file('.git/HEAD').isFile()) {
|
||||
@@ -104,6 +104,7 @@ checkPropertyExists("usesShadowedDependencies")
|
||||
checkPropertyExists("developmentEnvironmentUserName")
|
||||
|
||||
boolean noPublishedSources = project.findProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false
|
||||
boolean usesMixinDebug = project.findProperty('usesMixinDebug') ?: project.usesMixins.toBoolean()
|
||||
|
||||
String javaSourceDir = "src/main/java/"
|
||||
String scalaSourceDir = "src/main/scala/"
|
||||
@@ -175,7 +176,7 @@ configurations.all {
|
||||
try {
|
||||
'git config core.fileMode false'.execute()
|
||||
}
|
||||
catch (Exception e) {
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).println("git isn't installed at all")
|
||||
}
|
||||
|
||||
@@ -185,7 +186,7 @@ String versionOverride = System.getenv("VERSION") ?: null
|
||||
try {
|
||||
identifiedVersion = versionOverride == null ? gitVersion() : versionOverride
|
||||
}
|
||||
catch (Exception e) {
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).text(
|
||||
'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' +
|
||||
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
|
||||
@@ -199,7 +200,7 @@ ext {
|
||||
modVersion = identifiedVersion
|
||||
}
|
||||
|
||||
if( identifiedVersion.equals(versionOverride) ) {
|
||||
if(identifiedVersion == versionOverride) {
|
||||
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
|
||||
}
|
||||
|
||||
@@ -214,13 +215,17 @@ else {
|
||||
def arguments = []
|
||||
def jvmArguments = []
|
||||
|
||||
if(usesMixins.toBoolean()) {
|
||||
if (usesMixins.toBoolean()) {
|
||||
arguments += [
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true", "-Dmixin.debug.verbose=true", "-Dmixin.debug.export=true"
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
if (usesMixinDebug.toBoolean()) {
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true",
|
||||
"-Dmixin.debug.verbose=true",
|
||||
"-Dmixin.debug.export=true"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
minecraft {
|
||||
@@ -312,18 +317,23 @@ def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfig
|
||||
def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg"
|
||||
|
||||
task generateAssets {
|
||||
if(usesMixins.toBoolean()) {
|
||||
getFile("/src/main/resources/mixins." + modId + ".json").text = """{
|
||||
if (usesMixins.toBoolean()) {
|
||||
def mixinConfigFile = getFile("/src/main/resources/mixins." + modId + ".json");
|
||||
if (!mixinConfigFile.exists()) {
|
||||
mixinConfigFile.text = """{
|
||||
"required": true,
|
||||
"minVersion": "0.7.11",
|
||||
"package": "${modGroup}.${mixinsPackage}",
|
||||
"plugin": "${modGroup}.${mixinPlugin}",
|
||||
"refmap": "${mixingConfigRefMap}",
|
||||
"target": "@env(DEFAULT)",
|
||||
"compatibilityLevel": "JAVA_8"
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [],
|
||||
"client": [],
|
||||
"server": []
|
||||
}
|
||||
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -439,7 +449,7 @@ processResources {
|
||||
|
||||
def getManifestAttributes() {
|
||||
def manifestAttributes = [:]
|
||||
if(containsMixinsAndOrCoreModOnly.toBoolean() == false && (usesMixins.toBoolean() || coreModClass)) {
|
||||
if(!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) {
|
||||
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
|
||||
}
|
||||
|
||||
@@ -455,14 +465,14 @@ def getManifestAttributes() {
|
||||
manifestAttributes += [
|
||||
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
|
||||
"MixinConfigs" : "mixins." + modId + ".json",
|
||||
"ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
|
||||
"ForceLoadAsMod" : !containsMixinsAndOrCoreModOnly.toBoolean()
|
||||
]
|
||||
}
|
||||
return manifestAttributes
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
from (sourceSets.main.allJava)
|
||||
from (sourceSets.main.allSource)
|
||||
from (file("$projectDir/LICENSE"))
|
||||
getArchiveClassifier().set('sources')
|
||||
}
|
||||
@@ -517,7 +527,7 @@ task devJar(type: Jar) {
|
||||
}
|
||||
|
||||
task apiJar(type: Jar) {
|
||||
from (sourceSets.main.allJava) {
|
||||
from (sourceSets.main.allSource) {
|
||||
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
|
||||
}
|
||||
|
||||
@@ -548,6 +558,9 @@ tasks.withType(GenerateModuleMetadata) {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
// workaround variable hiding in pom processing
|
||||
def projectConfigs = project.configurations
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
@@ -556,7 +569,7 @@ publishing {
|
||||
artifact source: shadowJar, classifier: ""
|
||||
}
|
||||
if(!noPublishedSources) {
|
||||
artifact source: sourcesJar, classifier: "src"
|
||||
artifact source: sourcesJar, classifier: "sources"
|
||||
}
|
||||
artifact source: usesShadowedDependencies.toBoolean() ? shadowDevJar : devJar, classifier: "dev"
|
||||
if (apiPackage) {
|
||||
@@ -568,16 +581,20 @@ publishing {
|
||||
// Using the identified version, not project.version as it has the prepended 1.7.10
|
||||
version = System.getenv("RELEASE_VERSION") ?: identifiedVersion
|
||||
|
||||
// remove extra garbage from who knows where
|
||||
// remove extra garbage from minecraft and minecraftDeps configuration
|
||||
pom.withXml {
|
||||
def badPomGroup = ['net.minecraft', 'com.google.code.findbugs', 'org.ow2.asm', 'com.typesafe.akka', 'com.typesafe', 'org.scala-lang',
|
||||
'org.scala-lang.plugins', 'net.sf.jopt-simple', 'lzma', 'com.mojang', 'org.apache.commons', 'org.apache.httpcomponents',
|
||||
'commons-logging', 'java3d', 'net.sf.trove4j', 'com.ibm.icu', 'com.paulscode', 'io.netty', 'com.google.guava',
|
||||
'commons-io', 'commons-codec', 'net.java.jinput', 'net.java.jutils', 'com.google.code.gson', 'org.apache.logging.log4j',
|
||||
'org.lwjgl.lwjgl', 'tv.twitch', 'org.jetbrains.kotlin', '']
|
||||
def badArtifacts = [:].withDefault {[] as Set<String>}
|
||||
for (configuration in [projectConfigs.minecraft, projectConfigs.minecraftDeps]) {
|
||||
for (dependency in configuration.allDependencies) {
|
||||
badArtifacts[dependency.group == null ? "" : dependency.group] += dependency.name
|
||||
}
|
||||
}
|
||||
// example for specifying extra stuff to ignore
|
||||
// badArtifacts["org.example.group"] += "artifactName"
|
||||
|
||||
Node pomNode = asNode()
|
||||
pomNode.dependencies.'*'.findAll() {
|
||||
badPomGroup.contains(it.groupId.text())
|
||||
badArtifacts[it.groupId.text()].contains(it.artifactId.text())
|
||||
}.each() {
|
||||
it.parent().remove(it)
|
||||
}
|
||||
@@ -721,7 +738,7 @@ def deobf(String sourceURL, String fileName) {
|
||||
// Helper methods
|
||||
|
||||
def checkPropertyExists(String propertyName) {
|
||||
if (project.hasProperty(propertyName) == false) {
|
||||
if (!project.hasProperty(propertyName)) {
|
||||
throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/gradle.properties")
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -2,23 +2,23 @@
|
||||
|
||||
dependencies {
|
||||
compile('com.github.GTNewHorizons:EnderCore:0.2.6:dev')
|
||||
compile('com.github.GTNewHorizons:ForestryMC:4.4.5:dev')
|
||||
compile('com.github.GTNewHorizons:NotEnoughItems:2.2.7-GTNH:dev')
|
||||
compile('com.github.GTNewHorizons:ForestryMC:4.4.6:dev')
|
||||
compile('com.github.GTNewHorizons:NotEnoughItems:2.2.15-GTNH:dev')
|
||||
compile('com.github.GTNewHorizons:BuildCraft:7.1.27:dev')
|
||||
compile('curse.maven:cofh-lib-220333:2388748') // https://www.curseforge.com/minecraft/mc-mods/cofh-lib/files/2388748
|
||||
shadowImplementation('cglib:cglib-nodep:3.3.0')
|
||||
|
||||
compileOnly('com.github.GTNewHorizons:waila:1.5.19:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-76-GTNH:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-85-GTNH:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Baubles:1.0.1.14:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Railcraft:9.13.6:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:StorageDrawers:1.11.13-GTNH:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Chisel:2.10.8-GTNH:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.23-GTNH:api') {transitive = false}
|
||||
compile('com.github.GTNewHorizons:Chisel:2.10.8-GTNH:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.25-GTNH:api') {transitive = false}
|
||||
compileOnly('curse.maven:minefactory-reloaded-66672:2366150') // https://www.curseforge.com/minecraft/mc-mods/minefactory-reloaded/files/2366150
|
||||
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')
|
||||
compileOnly('curse.maven:ee3-65509:2305023') // https://www.curseforge.com/minecraft/mc-mods/ee3/files/2305023
|
||||
compileOnly(deobf('https://media.forgecdn.net/files/2269/339/ComputerCraft1.75.jar')) // https://www.curseforge.com/minecraft/mc-mods/computercraft/files/2269339
|
||||
compileOnly(deobf('https://s3.amazonaws.com/aidancbrady/mekanism/281-recommended/Mekanism-1.7.10-9.1.0.281.jar')) // https://aidancbrady.com/mekanism/download/
|
||||
compileOnly(deobf('https://media.forgecdn.net/files/2426/270/Mekanism-1.7.10-9.1.0.281.jar')) // https://aidancbrady.com/mekanism/download/
|
||||
compileOnly(deobf('https://immibis.com/mcmoddl/files/immibis-microblocks-59.1.2.jar'))
|
||||
}
|
||||
+1
-1
@@ -19,7 +19,7 @@ forgeVersion = 10.13.4.1614
|
||||
# restart Minecraft in development. Choose this dependent on your mod:
|
||||
# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name
|
||||
# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty
|
||||
developmentEnvironmentUserName = "Developer"
|
||||
developmentEnvironmentUserName = Developer
|
||||
|
||||
# Define a source file of your project with:
|
||||
# public static final String VERSION = "GRADLETOKEN_VERSION";
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.enderio.core.common.Lang;
|
||||
import com.enderio.core.common.network.MessageTileNBT;
|
||||
import com.enderio.core.common.util.EntityUtil;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
@@ -30,6 +29,7 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStartedEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
import cpw.mods.fml.common.registry.EntityRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -173,6 +173,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.WeightedRandomChestContent;
|
||||
import net.minecraftforge.common.ChestGenHooks;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
|
||||
@@ -591,7 +592,6 @@ public class EnderIO {
|
||||
|
||||
instance = this;
|
||||
|
||||
PacketHandler.INSTANCE.registerMessage(MessageTileNBT.class, MessageTileNBT.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketRedstoneMode.class, PacketRedstoneMode.class, PacketHandler.nextID(), Side.SERVER);
|
||||
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(this, guiHandler);
|
||||
@@ -830,9 +830,16 @@ public class EnderIO {
|
||||
ServerChannelRegister.load();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void worldSaved(WorldEvent.Save event) {
|
||||
// Only save together with the overworld, because this gets called for every dimension separately
|
||||
if (event.world.provider != null && event.world.provider.dimensionId == 0) {
|
||||
ServerChannelRegister.store();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void serverStopped(FMLServerStoppedEvent event) {
|
||||
HyperCubeRegister.unload();
|
||||
ServerChannelRegister.store();
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import crazypants.util.UserIdent;
|
||||
|
||||
public interface ITravelAccessable {
|
||||
|
||||
public enum AccessMode {
|
||||
enum AccessMode {
|
||||
PUBLIC,
|
||||
PRIVATE,
|
||||
PROTECTED
|
||||
@@ -53,8 +53,22 @@ public interface ITravelAccessable {
|
||||
|
||||
void setPlacedBy(EntityPlayer player);
|
||||
|
||||
public void clearAuthorisedUsers();
|
||||
void clearAuthorisedUsers();
|
||||
|
||||
public BlockCoord getLocation();
|
||||
BlockCoord getLocation();
|
||||
|
||||
/**
|
||||
* Is this block a travel target for the staff or a travel anchor?
|
||||
*/
|
||||
default boolean isTravelSource() {
|
||||
return true;
|
||||
}
|
||||
|
||||
default boolean isVisible() {
|
||||
return true;
|
||||
}
|
||||
|
||||
default void setVisible(boolean visible) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -164,11 +164,15 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
|
||||
facadeMeta = nbtRoot.getInteger("facadeMeta");
|
||||
|
||||
if(worldObj != null && worldObj.isRemote) {
|
||||
if (conduits.size() == 1 && conduits.get(0) instanceof IItemConduit) {
|
||||
boolean stableConduit = true;
|
||||
for(IConduit iConduit: conduits) {
|
||||
if (!(iConduit instanceof IItemConduit) && !(iConduit instanceof IMEConduit) && !(iConduit instanceof IOCConduit)) stableConduit = false;
|
||||
}
|
||||
if (stableConduit) {
|
||||
boolean itemConduitClientUpdated = false;
|
||||
for (Object o : Minecraft.getMinecraft().theWorld.playerEntities) {
|
||||
Entity e = ((Entity) o);
|
||||
if (e.getDistanceSq(this.xCoord, yCoord, zCoord) < 36) {
|
||||
if (e.getDistanceSq(this.xCoord, yCoord, zCoord) < 25) {
|
||||
itemConduitClientUpdated = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -74,11 +74,6 @@ public class BigItemFilterGui implements IItemFilterGui {
|
||||
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
|
||||
useMetaB.setPaintSelectedBorder(false);
|
||||
|
||||
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
|
||||
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
|
||||
stickyB.setPaintSelectedBorder(false);
|
||||
|
||||
y -= 20;
|
||||
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
|
||||
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
|
||||
@@ -93,6 +88,12 @@ public class BigItemFilterGui implements IItemFilterGui {
|
||||
|
||||
y -= 20;
|
||||
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
|
||||
|
||||
x -= 20;
|
||||
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
|
||||
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
|
||||
stickyB.setPaintSelectedBorder(false);
|
||||
}
|
||||
|
||||
public void createFilterSlots() {
|
||||
|
||||
@@ -161,6 +161,7 @@ public final class Config {
|
||||
"Thaumcraft:blockWarded"
|
||||
};
|
||||
public static float travelAnchorZoomScale = 0.2f;
|
||||
public static boolean travelStaffSearchOptimize = true;
|
||||
|
||||
public static int enderIoRange = 8;
|
||||
public static boolean enderIoMeAccessEnabled = true;
|
||||
@@ -386,6 +387,13 @@ public final class Config {
|
||||
public static int poweredSpawnerLevelOnePowerPerTickRF = 160;
|
||||
public static int poweredSpawnerLevelTwoPowerPerTickRF = 500;
|
||||
public static int poweredSpawnerLevelThreePowerPerTickRF = 1500;
|
||||
public static int poweredSpawnerLevelFourPowerPerTickRF = 4500;
|
||||
public static int poweredSpawnerLevelFivePowerPerTickRF = 2000;
|
||||
public static int poweredSpawnerLevelSixPowerPerTickRF = 1000;
|
||||
public static int poweredSpawnerLevelSevenPowerPerTickRF = 500;
|
||||
public static int poweredSpawnerLevelEightPowerPerTickRF = 160;
|
||||
public static int poweredSpawnerLevelNinePowerPerTickRF = 500;
|
||||
public static int poweredSpawnerLevelTenPowerPerTickRF = 1500;
|
||||
public static int poweredSpawnerMaxPlayerDistance = 0;
|
||||
public static int poweredSpawnerDespawnTimeSeconds = 120;
|
||||
public static int poweredSpawnerSpawnCount = 4;
|
||||
@@ -439,6 +447,13 @@ public final class Config {
|
||||
public static int soulBinderLevelOnePowerPerTickRF = 500;
|
||||
public static int soulBinderLevelTwoPowerPerTickRF = 1000;
|
||||
public static int soulBinderLevelThreePowerPerTickRF = 2000;
|
||||
public static int soulBinderLevelFourPowerPerTickRF = 4000;
|
||||
public static int soulBinderLevelFivePowerPerTickRF = 8000;
|
||||
public static int soulBinderLevelSixPowerPerTickRF = 16000;
|
||||
public static int soulBinderLevelSevenPowerPerTickRF = 32000;
|
||||
public static int soulBinderLevelEightPowerPerTickRF = 500;
|
||||
public static int soulBinderLevelNinePowerPerTickRF = 1000;
|
||||
public static int soulBinderLevelTenPowerPerTickRF = 2000;
|
||||
public static int soulBinderBrokenSpawnerRF = 2500000;
|
||||
public static int soulBinderBrokenSpawnerLevels = 15;
|
||||
public static int soulBinderReanimationRF = 100000;
|
||||
@@ -463,6 +478,13 @@ public final class Config {
|
||||
public static int sliceAndSpliceLevelOnePowerPerTickRF = 80;
|
||||
public static int sliceAndSpliceLevelTwoPowerPerTickRF = 160;
|
||||
public static int sliceAndSpliceLevelThreePowerPerTickRF = 320;
|
||||
public static int sliceAndSpliceLevelFourPowerPerTickRF = 640;
|
||||
public static int sliceAndSpliceLevelFivePowerPerTickRF = 1280;
|
||||
public static int sliceAndSpliceLevelSixPowerPerTickRF = 2560;
|
||||
public static int sliceAndSpliceLevelSevenPowerPerTickRF = 5120;
|
||||
public static int sliceAndSpliceLevelEightPowerPerTickRF = 80;
|
||||
public static int sliceAndSpliceLevelNinePowerPerTickRF = 160;
|
||||
public static int sliceAndSpliceLevelTenPowerPerTickRF = 320;
|
||||
|
||||
public static boolean soulBinderRequiresEndermanSkull = true;
|
||||
|
||||
@@ -849,6 +871,11 @@ public final class Config {
|
||||
"Lists the blocks that cannot be teleported through in the form 'modID:blockName'");
|
||||
travelAnchorZoomScale = config.getFloat("travelAnchorZoomScale", sectionStaff.name, travelAnchorZoomScale, 0, 1,
|
||||
"Set the max zoomed size of a travel anchor as an aprox. percentage of screen height");
|
||||
travelStaffSearchOptimize = config.get(sectionStaff.name, "travelStaffSearchOptimize", travelStaffSearchOptimize,
|
||||
"If set to true: blinking by travel staff has reduced search branch. " +
|
||||
"You can now teleport onto the roof. " +
|
||||
"This config is experimental, so if you encounter any strange behavior, please report to GTNH developer.")
|
||||
.getBoolean(travelStaffSearchOptimize);
|
||||
|
||||
|
||||
enderIoRange = config.get(sectionEfficiency.name, "enderIoRange", enderIoRange,
|
||||
@@ -1231,6 +1258,27 @@ public final class Config {
|
||||
poweredSpawnerLevelThreePowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelThreePowerPerTickRF",
|
||||
poweredSpawnerLevelThreePowerPerTickRF,
|
||||
"RF per tick for a level 3 spawner").getInt(poweredSpawnerLevelThreePowerPerTickRF);
|
||||
poweredSpawnerLevelFourPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelFourPowerPerTickRF",
|
||||
poweredSpawnerLevelFourPowerPerTickRF,
|
||||
"RF per tick for a level 4 spawner").getInt(poweredSpawnerLevelFourPowerPerTickRF);
|
||||
poweredSpawnerLevelFivePowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelFivePowerPerTickRF",
|
||||
poweredSpawnerLevelFivePowerPerTickRF,
|
||||
"RF per tick for a level 5 spawner").getInt(poweredSpawnerLevelFivePowerPerTickRF);
|
||||
poweredSpawnerLevelSixPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelSixPowerPerTickRF",
|
||||
poweredSpawnerLevelSixPowerPerTickRF,
|
||||
"RF per tick for a level 6 spawner").getInt(poweredSpawnerLevelSixPowerPerTickRF);
|
||||
poweredSpawnerLevelSevenPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelSevenPowerPerTickRF",
|
||||
poweredSpawnerLevelSevenPowerPerTickRF,
|
||||
"RF per tick for a level 7 spawner").getInt(poweredSpawnerLevelSevenPowerPerTickRF);
|
||||
poweredSpawnerLevelEightPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelEightPowerPerTickRF",
|
||||
poweredSpawnerLevelEightPowerPerTickRF,
|
||||
"RF per tick for a level 1 spawner").getInt(poweredSpawnerLevelEightPowerPerTickRF);
|
||||
poweredSpawnerLevelNinePowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelNinePowerPerTickRF",
|
||||
poweredSpawnerLevelNinePowerPerTickRF,
|
||||
"RF per tick for a level 2 spawner").getInt(poweredSpawnerLevelNinePowerPerTickRF);
|
||||
poweredSpawnerLevelTenPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelTenPowerPerTickRF",
|
||||
poweredSpawnerLevelTenPowerPerTickRF,
|
||||
"RF per tick for a level 3 spawner").getInt(poweredSpawnerLevelTenPowerPerTickRF);
|
||||
poweredSpawnerMaxPlayerDistance = config.get(sectionSpawner.name, "poweredSpawnerMaxPlayerDistance", poweredSpawnerMaxPlayerDistance,
|
||||
"Max distance of the closest player for the spawner to be active. A zero value will remove the player check").getInt(poweredSpawnerMaxPlayerDistance);
|
||||
poweredSpawnerDespawnTimeSeconds = config.get(sectionSpawner.name, "poweredSpawnerDespawnTimeSeconds" , poweredSpawnerDespawnTimeSeconds,
|
||||
@@ -1303,9 +1351,23 @@ public final class Config {
|
||||
soulBinderLevelOnePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelOnePowerPerTickRF", soulBinderLevelOnePowerPerTickRF,
|
||||
"The number of RF/t consumed by an unupgraded soul binder.").getInt(soulBinderLevelOnePowerPerTickRF);
|
||||
soulBinderLevelTwoPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelTwoPowerPerTickRF", soulBinderLevelTwoPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with a double layer capacitor upgrade.").getInt(soulBinderLevelTwoPowerPerTickRF);
|
||||
"The number of RF/t consumed by a soul binder with a double layer capacitor or a endergetic capacitor upgrade.").getInt(soulBinderLevelTwoPowerPerTickRF);
|
||||
soulBinderLevelThreePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelThreePowerPerTickRF", soulBinderLevelThreePowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an octadic capacitor upgrade.").getInt(soulBinderLevelThreePowerPerTickRF);
|
||||
"The number of RF/t consumed by a soul binder with an octadic capacitor or a endergised upgrade.").getInt(soulBinderLevelThreePowerPerTickRF);
|
||||
soulBinderLevelFourPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelFourPowerPerTickRF", soulBinderLevelFourPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an crystalline capacitor upgrade.").getInt(soulBinderLevelFourPowerPerTickRF);
|
||||
soulBinderLevelFivePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelFivePowerPerTickRF", soulBinderLevelFivePowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an melodic capacitor upgrade.").getInt(soulBinderLevelFivePowerPerTickRF);
|
||||
soulBinderLevelSixPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelSixPowerPerTickRF", soulBinderLevelSixPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an stellar capacitor upgrade.").getInt(soulBinderLevelSixPowerPerTickRF);
|
||||
soulBinderLevelSevenPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelSevenPowerPerTickRF", soulBinderLevelSevenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an totemic capacitor upgrade.").getInt(soulBinderLevelSevenPowerPerTickRF);
|
||||
soulBinderLevelEightPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelEightPowerPerTickRF", soulBinderLevelEightPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an silver capacitor upgrade.").getInt(soulBinderLevelEightPowerPerTickRF);
|
||||
soulBinderLevelNinePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelNinePowerPerTickRF", soulBinderLevelNinePowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an endergetic capacitor upgrade.").getInt(soulBinderLevelNinePowerPerTickRF);
|
||||
soulBinderLevelTenPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelTenPowerPerTickRF", soulBinderLevelTenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an endergised capacitor upgrade.").getInt(soulBinderLevelTenPowerPerTickRF);
|
||||
soulBinderBrokenSpawnerRF = config.get(sectionSoulBinder.name, "soulBinderBrokenSpawnerRF", soulBinderBrokenSpawnerRF,
|
||||
"The number of RF required to change the type of a broken spawner.").getInt(soulBinderBrokenSpawnerRF);
|
||||
soulBinderReanimationRF = config.get(sectionSoulBinder.name, "soulBinderReanimationRF", soulBinderReanimationRF,
|
||||
@@ -1341,6 +1403,21 @@ public final class Config {
|
||||
"The number of RF/t consumed by a Slice'N'Splice with a double layer capacitor upgrade.").getInt(sliceAndSpliceLevelTwoPowerPerTickRF);
|
||||
sliceAndSpliceLevelThreePowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelThreePowerPerTickRF", sliceAndSpliceLevelThreePowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an octadic capacitor upgrade.").getInt(sliceAndSpliceLevelThreePowerPerTickRF);
|
||||
sliceAndSpliceLevelFourPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelFourPowerPerTickRF", sliceAndSpliceLevelFourPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an crystalline capacitor upgrade.").getInt(sliceAndSpliceLevelFourPowerPerTickRF);
|
||||
sliceAndSpliceLevelFivePowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelFivePowerPerTickRF", sliceAndSpliceLevelFivePowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an melodic capacitor upgrade.").getInt(sliceAndSpliceLevelFivePowerPerTickRF);
|
||||
sliceAndSpliceLevelSixPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelSixPowerPerTickRF", sliceAndSpliceLevelSixPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an stellar capacitor upgrade.").getInt(sliceAndSpliceLevelSixPowerPerTickRF);
|
||||
sliceAndSpliceLevelSevenPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelSevenPowerPerTickRF", sliceAndSpliceLevelSevenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an totemic capacitor upgrade.").getInt(sliceAndSpliceLevelSevenPowerPerTickRF);
|
||||
sliceAndSpliceLevelEightPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelEightPowerPerTickRF", sliceAndSpliceLevelEightPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an silver capacitor upgrade.").getInt(sliceAndSpliceLevelEightPowerPerTickRF);
|
||||
sliceAndSpliceLevelNinePowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelNinePowerPerTickRF", sliceAndSpliceLevelNinePowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an endergetic capacitor upgrade.").getInt(sliceAndSpliceLevelNinePowerPerTickRF);
|
||||
sliceAndSpliceLevelTenPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelTenPowerPerTickRF", sliceAndSpliceLevelTenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an endergised capacitor upgrade.").getInt(sliceAndSpliceLevelTenPowerPerTickRF);
|
||||
|
||||
|
||||
attractorRangeLevelOne = config.get(sectionAttractor.name, "attractorRangeLevelOne", attractorRangeLevelOne,
|
||||
"The range of the mob attractor with no upgrades").getInt(attractorRangeLevelOne);
|
||||
|
||||
@@ -123,7 +123,10 @@ public enum IconEIO implements IWidgetIcon {
|
||||
SORT_SIZE_DOWN(224, 240, SORT_DIR_DOWN),
|
||||
SORT_SIZE_UP(224, 240, SORT_DIR_UP),
|
||||
SORT_MOD_DOWN(240, 240, SORT_DIR_DOWN),
|
||||
SORT_MOD_UP(240, 240, SORT_DIR_UP);
|
||||
SORT_MOD_UP(240, 240, SORT_DIR_UP),
|
||||
|
||||
VISIBLE_NO(224, 160),
|
||||
VISIBLE_YES(240, 160);
|
||||
|
||||
// Texture size is actually 512 but everything is aligned to a 256 grid
|
||||
private static final int TEX_SIZE = 256;
|
||||
|
||||
@@ -41,9 +41,9 @@ public class TooltipHandlerFluid implements ITooltipCallback {
|
||||
} else {
|
||||
IFluidCoolant coolant = FluidFuelRegister.instance.getCoolant(fluid);
|
||||
if (coolant != null) {
|
||||
list.add(EnderIO.lang.localize("enderio.coolant.tooltip.heading"));
|
||||
list.add(EnderIO.lang.localize("coolant.tooltip.heading"));
|
||||
list.add(EnumChatFormatting.ITALIC + " " + PowerDisplayUtil.formatPowerFloat(coolant.getDegreesCoolingPerMB(100) * 1000) + " "
|
||||
+ EnderIO.lang.localize("enderio.coolant.tooltip.degreesPerBucket"));
|
||||
+ EnderIO.lang.localize("coolant.tooltip.degreesPerBucket"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,11 @@ import crazypants.enderio.material.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class TravelUpgrade extends AbstractUpgrade {
|
||||
|
||||
private static String UPGRADE_NAME = "travel";
|
||||
private static final String UPGRADE_NAME = "travel";
|
||||
|
||||
public static final TravelUpgrade INSTANCE = new TravelUpgrade();
|
||||
|
||||
@@ -32,17 +34,18 @@ public class TravelUpgrade extends AbstractUpgrade {
|
||||
}
|
||||
|
||||
public TravelUpgrade() {
|
||||
super(UPGRADE_NAME, "enderio.darksteel.upgrade.travel", new ItemStack(EnderIO.itemMaterial,1,Material.ENDER_CRYSTAL.ordinal()), Config.darkSteelTravelCost);
|
||||
super(UPGRADE_NAME, "enderio.darksteel.upgrade.travel", new ItemStack(EnderIO.itemMaterial, 1, Material.ENDER_CRYSTAL.ordinal()), Config.darkSteelTravelCost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAddToItem(ItemStack stack) {
|
||||
if(stack == null || (stack.getItem() != DarkSteelItems.itemDarkSteelSword && stack.getItem() != DarkSteelItems.itemEndSteelPickaxe && stack.getItem() != DarkSteelItems.itemEndSteelSword && stack.getItem() != DarkSteelItems.itemDarkSteelPickaxe)|| !EnergyUpgrade.itemHasAnyPowerUpgrade(stack)) {
|
||||
return false;
|
||||
}
|
||||
TravelUpgrade up = loadFromItem(stack);
|
||||
if(up == null) {
|
||||
return true;
|
||||
if(stack == null) return false;
|
||||
if(Stream.of(
|
||||
DarkSteelItems.itemDarkSteelSword, DarkSteelItems.itemEndSteelSword, DarkSteelItems.itemStellarSword,
|
||||
DarkSteelItems.itemDarkSteelPickaxe, DarkSteelItems.itemEndSteelPickaxe, DarkSteelItems.itemStellarPickaxe,
|
||||
DarkSteelItems.itemEndSteelAxe, DarkSteelItems.itemStellarAxe
|
||||
).anyMatch(item -> stack.getItem() == item)) {
|
||||
return EnergyUpgrade.itemHasAnyPowerUpgrade(stack) && loadFromItem(stack) == null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -196,7 +196,7 @@ public class TileFarmStation extends AbstractPoweredTaskEntity {
|
||||
if(inventory[upg] == null) {
|
||||
return 0;
|
||||
} else {
|
||||
return Config.farmBonusSize * EnderIO.itemBasicCapacitor.getCapacitor(inventory[upg]).getTier();
|
||||
return Config.farmBonusSize * (EnderIO.itemBasicCapacitor.getCapacitor(inventory[upg]).getTier()-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package crazypants.enderio.machine.farm.farmers;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -41,7 +42,11 @@ public class CustomSeedFarmer implements IFarmerJoe {
|
||||
this.grownBlockMeta = grownBlockMeta;
|
||||
this.seeds = seeds;
|
||||
FarmStationContainer.slotItemsSeeds.add(seeds);
|
||||
addTilledBlock(Blocks.farmland);
|
||||
addTilledBlock(Blocks.farmland);
|
||||
Block ztonesSoil = GameRegistry.findBlock("Ztones", "cleanDirt");
|
||||
if (ztonesSoil != null) {
|
||||
addTilledBlock(ztonesSoil);
|
||||
}
|
||||
}
|
||||
|
||||
public void addTilledBlock(Block block) {
|
||||
|
||||
@@ -92,16 +92,20 @@ public class TileAttractor extends AbstractPowerConsumerEntity implements IRange
|
||||
|
||||
@Override
|
||||
public void onCapacitorTypeChange() {
|
||||
switch (getCapacitorType()) {
|
||||
case ACTIVATED_CAPACITOR:
|
||||
switch (getCapacitor().getTier()) {
|
||||
case 2:
|
||||
range = Config.attractorRangeLevelTwo;
|
||||
powerPerTick = Config.attractorPowerPerTickLevelTwo;
|
||||
break;
|
||||
case ENDER_CAPACITOR:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
range = Config.attractorRangeLevelThree;
|
||||
powerPerTick = Config.attractorPowerPerTickLevelThree;
|
||||
break;
|
||||
case BASIC_CAPACITOR:
|
||||
case 1:
|
||||
default:
|
||||
range = Config.attractorRangeLevelOne;
|
||||
powerPerTick = Config.attractorPowerPerTickLevelOne;
|
||||
|
||||
@@ -70,16 +70,20 @@ public class TileAversionObelisk extends AbstractPowerConsumerEntity implements
|
||||
|
||||
@Override
|
||||
public void onCapacitorTypeChange() {
|
||||
switch (getCapacitorType()) {
|
||||
case BASIC_CAPACITOR:
|
||||
switch (getCapacitor().getTier()) {
|
||||
case 1:
|
||||
range = Config.spawnGuardRangeLevelOne;
|
||||
powerPerTick = Config.spawnGuardPowerPerTickLevelOne;
|
||||
break;
|
||||
case ACTIVATED_CAPACITOR:
|
||||
case 2:
|
||||
range = Config.spawnGuardRangeLevelTwo;
|
||||
powerPerTick = Config.spawnGuardPowerPerTickLevelTwo;
|
||||
break;
|
||||
case ENDER_CAPACITOR:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
range = Config.spawnGuardRangeLevelThree;
|
||||
powerPerTick = Config.spawnGuardPowerPerTickLevelThree;
|
||||
break;
|
||||
|
||||
@@ -39,6 +39,48 @@ public class TileSliceAndSplice extends AbstractPoweredTaskEntity {
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_THREE);
|
||||
|
||||
public static final int POWER_PER_TICK_FOUR = Config.sliceAndSpliceLevelFourPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FOUR = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_FOUR * 2,
|
||||
Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_FOUR);
|
||||
|
||||
public static final int POWER_PER_TICK_FIVE = Config.sliceAndSpliceLevelFivePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FIVE = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_FIVE * 2,
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_FIVE);
|
||||
|
||||
public static final int POWER_PER_TICK_SIX = Config.sliceAndSpliceLevelSixPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SIX = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_SIX * 2,
|
||||
Capacitors.STELLAR_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_SIX);
|
||||
|
||||
public static final int POWER_PER_TICK_SEVEN = Config.sliceAndSpliceLevelSevenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SEVEN = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_SEVEN * 2,
|
||||
Capacitors.TOTEMIC_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_SEVEN);
|
||||
|
||||
public static final int POWER_PER_TICK_EIGHT = Config.sliceAndSpliceLevelEightPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_EIGHT = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_EIGHT * 2,
|
||||
Capacitors.SILVER_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_EIGHT);
|
||||
|
||||
public static final int POWER_PER_TICK_NINE = Config.sliceAndSpliceLevelNinePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_NINE = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_NINE * 2,
|
||||
Capacitors.ENDERGETIC_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_NINE);
|
||||
|
||||
public static final int POWER_PER_TICK_TEN = Config.sliceAndSpliceLevelTenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TEN = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_TEN * 2,
|
||||
Capacitors.ENDERGISED_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_TEN);
|
||||
|
||||
private final int axeIndex = 6;
|
||||
private final int shearsIndex = 7;
|
||||
private EntityLivingBase fakePlayer;
|
||||
@@ -67,6 +109,27 @@ public class TileSliceAndSplice extends AbstractPoweredTaskEntity {
|
||||
setCapacitor(CAP_TWO);
|
||||
break;
|
||||
case ENDER_CAPACITOR:
|
||||
setCapacitor(CAP_THREE);
|
||||
break;
|
||||
case CRYSTALLINE_CAPACITOR:
|
||||
setCapacitor(CAP_FOUR);
|
||||
break;
|
||||
case MELODIC_CAPACITOR:
|
||||
setCapacitor(CAP_FIVE);
|
||||
break;
|
||||
case STELLAR_CAPACITOR:
|
||||
setCapacitor(CAP_SIX);
|
||||
break;
|
||||
case TOTEMIC_CAPACITOR:
|
||||
setCapacitor(CAP_SEVEN);
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
setCapacitor(CAP_ONE);
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
setCapacitor(CAP_TWO);
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
setCapacitor(CAP_THREE);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -43,6 +43,35 @@ public class TileSoulBinder extends AbstractPoweredTaskEntity implements IHaveEx
|
||||
private static final BasicCapacitor CAP_THREE = new BasicCapacitor(0,POWER_PER_TICK_THREE * 2,
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_THREE);
|
||||
|
||||
public static final int POWER_PER_TICK_FOUR = Config.soulBinderLevelFourPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FOUR = new BasicCapacitor(0,POWER_PER_TICK_FOUR * 2,
|
||||
Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_FOUR);
|
||||
|
||||
public static final int POWER_PER_TICK_FIVE = Config.soulBinderLevelFivePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FIVE = new BasicCapacitor(0,POWER_PER_TICK_FIVE * 2,
|
||||
Capacitors.MELODIC_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_FIVE);
|
||||
|
||||
public static final int POWER_PER_TICK_SIX = Config.soulBinderLevelSixPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SIX = new BasicCapacitor(0,POWER_PER_TICK_SIX * 2,
|
||||
Capacitors.STELLAR_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_SIX);
|
||||
|
||||
public static final int POWER_PER_TICK_SEVEN = Config.soulBinderLevelSevenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SEVEN = new BasicCapacitor(0,POWER_PER_TICK_SEVEN * 2,
|
||||
Capacitors.TOTEMIC_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_SEVEN);
|
||||
|
||||
public static final int POWER_PER_TICK_EIGHT = Config.soulBinderLevelEightPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_EIGHT = new BasicCapacitor(0,POWER_PER_TICK_EIGHT * 2,
|
||||
Capacitors.SILVER_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_EIGHT);
|
||||
|
||||
public static final int POWER_PER_TICK_NINE = Config.soulBinderLevelNinePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_NINE = new BasicCapacitor(0,POWER_PER_TICK_NINE * 2,
|
||||
Capacitors.ENDERGETIC_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_NINE);
|
||||
|
||||
public static final int POWER_PER_TICK_TEN = Config.soulBinderLevelTenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TEN = new BasicCapacitor(0,POWER_PER_TICK_TEN * 2,
|
||||
Capacitors.ENDERGISED_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_TEN);
|
||||
|
||||
|
||||
private final ExperienceContainer xpCont = new ExperienceContainer(XpUtil.getExperienceForLevel(Config.soulBinderMaxXpLevel));
|
||||
|
||||
public TileSoulBinder() {
|
||||
@@ -170,18 +199,25 @@ public class TileSoulBinder extends AbstractPoweredTaskEntity implements IHaveEx
|
||||
setCapacitor(CAP_THREE);
|
||||
break;
|
||||
case CRYSTALLINE_CAPACITOR:
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
setCapacitor(CAP_FOUR);
|
||||
break;
|
||||
case MELODIC_CAPACITOR:
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
setCapacitor(CAP_FIVE);
|
||||
break;
|
||||
case STELLAR_CAPACITOR:
|
||||
setCapacitor(CAP_SIX);
|
||||
break;
|
||||
case TOTEMIC_CAPACITOR:
|
||||
setCapacitor(CAP_SEVEN);
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
setCapacitor(CAP_EIGHT);
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
setCapacitor(CAP_NINE);
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
setCapacitor(CAP_TEN);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -25,15 +25,34 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity {
|
||||
public static final int MAX_SPAWN_DELAY_BASE = Config.poweredSpawnerMaxDelayTicks;
|
||||
|
||||
public static final int POWER_PER_TICK_ONE = Config.poweredSpawnerLevelOnePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_ONE = new BasicCapacitor(0, (int) (POWER_PER_TICK_ONE * 1.25), Capacitors.BASIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
private static final BasicCapacitor CAP_ONE = new BasicCapacitor(Capacitors.BASIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_ONE * 1.25), Capacitors.BASIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_TWO = Config.poweredSpawnerLevelTwoPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TWO = new BasicCapacitor(0,(int) (POWER_PER_TICK_TWO * 1.25),
|
||||
Capacitors.ACTIVATED_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
private static final BasicCapacitor CAP_TWO = new BasicCapacitor(Capacitors.ACTIVATED_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_TWO * 1.25), Capacitors.ACTIVATED_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_THREE = Config.poweredSpawnerLevelThreePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_THREE = new BasicCapacitor(0,(int) (POWER_PER_TICK_THREE * 1.25),
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
private static final BasicCapacitor CAP_THREE = new BasicCapacitor(Capacitors.ENDER_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_THREE * 1.25), Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_FOUR = Config.poweredSpawnerLevelFourPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FOUR = new BasicCapacitor(Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_FOUR * 1.25), Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_FIVE = Config.poweredSpawnerLevelFivePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FIVE = new BasicCapacitor(Capacitors.MELODIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_FIVE * 1.25), Capacitors.MELODIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_SIX = Config.poweredSpawnerLevelSixPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SIX = new BasicCapacitor(Capacitors.STELLAR_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_SIX * 1.25), Capacitors.STELLAR_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_SEVEN = Config.poweredSpawnerLevelSevenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SEVEN = new BasicCapacitor(Capacitors.TOTEMIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_SEVEN * 1.25), Capacitors.TOTEMIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_EIGHT = Config.poweredSpawnerLevelEightPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_EIGHT = new BasicCapacitor(Capacitors.SILVER_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_EIGHT * 1.25), Capacitors.SILVER_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_NINE = Config.poweredSpawnerLevelNinePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_NINE = new BasicCapacitor(Capacitors.ENDERGETIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_NINE * 1.25), Capacitors.ENDERGETIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_TEN = Config.poweredSpawnerLevelTenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TEN = new BasicCapacitor(Capacitors.ENDERGISED_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_TEN * 1.25), Capacitors.ENDERGISED_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int MIN_PLAYER_DISTANCE = Config.poweredSpawnerMaxPlayerDistance;
|
||||
public static final boolean USE_VANILLA_SPAWN_CHECKS = Config.poweredSpawnerUseVanillaSpawChecks;
|
||||
@@ -99,9 +118,37 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity {
|
||||
refCap = CAP_THREE;
|
||||
basePowerUse = POWER_PER_TICK_THREE;
|
||||
break;
|
||||
case CRYSTALLINE_CAPACITOR:
|
||||
refCap = CAP_FOUR;
|
||||
basePowerUse = POWER_PER_TICK_FOUR;
|
||||
break;
|
||||
case MELODIC_CAPACITOR:
|
||||
refCap = CAP_FIVE;
|
||||
basePowerUse = POWER_PER_TICK_FIVE;
|
||||
break;
|
||||
case STELLAR_CAPACITOR:
|
||||
refCap = CAP_SIX;
|
||||
basePowerUse = POWER_PER_TICK_SIX;
|
||||
break;
|
||||
case TOTEMIC_CAPACITOR:
|
||||
refCap = CAP_SEVEN;
|
||||
basePowerUse = POWER_PER_TICK_SEVEN;
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
refCap = CAP_EIGHT;
|
||||
basePowerUse = POWER_PER_TICK_EIGHT;
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
refCap = CAP_NINE;
|
||||
basePowerUse = POWER_PER_TICK_NINE;
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
refCap = CAP_TEN;
|
||||
basePowerUse = POWER_PER_TICK_TEN;
|
||||
break;
|
||||
}
|
||||
double multiplier = PoweredSpawnerConfig.getInstance().getCostMultiplierFor(getEntityName());
|
||||
setCapacitor(new BasicCapacitor((int) (refCap.getMaxEnergyExtracted() * multiplier), refCap.getMaxEnergyStored()));
|
||||
setCapacitor(new BasicCapacitor(refCap.getTier(), (int) (refCap.getMaxEnergyExtracted() * multiplier), refCap.getMaxEnergyStored()));
|
||||
powerUsePerTick = (int) Math.ceil(basePowerUse * multiplier);
|
||||
forceClientUpdate = true;
|
||||
}
|
||||
@@ -211,11 +258,7 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity {
|
||||
} else {
|
||||
ticksDelay = TilePoweredSpawner.MAX_SPAWN_DELAY_BASE - ((TilePoweredSpawner.MAX_SPAWN_DELAY_BASE - TilePoweredSpawner.MIN_SPAWN_DELAY_BASE) / 2);
|
||||
}
|
||||
if(getCapacitorType().ordinal() == 1) {
|
||||
ticksDelay /= 2;
|
||||
} else if(getCapacitorType().ordinal() == 2) {
|
||||
ticksDelay /= 4;
|
||||
}
|
||||
ticksDelay >>= Math.min(3, getCapacitor().getTier() - 1);
|
||||
int powerPerTick = getPowerUsePerTick();
|
||||
res.setRequiredEnergy(powerPerTick * ticksDelay);
|
||||
return res;
|
||||
|
||||
@@ -2,6 +2,9 @@ package crazypants.enderio.teleport;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import com.enderio.core.client.gui.button.ToggleButton;
|
||||
import crazypants.enderio.gui.IconEIO;
|
||||
import crazypants.enderio.teleport.packet.PacketVisibility;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
@@ -29,18 +32,23 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
private static final int ID_PUBLIC = 0;
|
||||
private static final int ID_PRIVATE = 1;
|
||||
private static final int ID_PROTECTED = 2;
|
||||
private static final int ID_VISIBLE = -1;
|
||||
|
||||
private CheckBox publicCB;
|
||||
private CheckBox privateCB;
|
||||
private CheckBox protectedCB;
|
||||
private final CheckBox publicCB;
|
||||
private final CheckBox privateCB;
|
||||
private final CheckBox protectedCB;
|
||||
private final ToggleButton visibleCB;
|
||||
|
||||
private TextFieldEnder tf;
|
||||
private final TextFieldEnder tf;
|
||||
|
||||
private String publicStr;
|
||||
private String privateStr;
|
||||
private String protectedStr;
|
||||
private final String publicStr;
|
||||
private final String privateStr;
|
||||
private final String protectedStr;
|
||||
private final String visibleStr;
|
||||
private final String visibleDesc1Str;
|
||||
private final String visibleDesc2Str;
|
||||
|
||||
private ITravelAccessable te;
|
||||
private final ITravelAccessable te;
|
||||
private int col0x;
|
||||
private int col1x;
|
||||
private int col2x;
|
||||
@@ -59,6 +67,9 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
publicStr = EnderIO.lang.localize("gui.travelAccessable.public");
|
||||
privateStr = EnderIO.lang.localize("gui.travelAccessable.private");
|
||||
protectedStr = EnderIO.lang.localize("gui.travelAccessable.protected");
|
||||
visibleStr = EnderIO.lang.localize("gui.travelAccessable.tooltip.visible");
|
||||
visibleDesc1Str = EnderIO.lang.localize("gui.travelAccessable.tooltip.visible.desc1");
|
||||
visibleDesc2Str = EnderIO.lang.localize("gui.travelAccessable.tooltip.visible.desc2");
|
||||
|
||||
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
|
||||
|
||||
@@ -84,6 +95,10 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
publicCB = new CheckBox(this, ID_PUBLIC, x, y);
|
||||
publicCB.setSelected(te.getAccessMode() == AccessMode.PUBLIC);
|
||||
|
||||
visibleCB = new ToggleButton(this, ID_VISIBLE, 150, 10, IconEIO.VISIBLE_NO, IconEIO.VISIBLE_YES);
|
||||
visibleCB.setSelected(te.isVisible());
|
||||
visibleCB.setToolTip(visibleStr, visibleDesc1Str, visibleDesc2Str);
|
||||
|
||||
ySize = 185;
|
||||
|
||||
textFields.add(tf);
|
||||
@@ -91,16 +106,24 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton b) {
|
||||
privateCB.setSelected(b.id == ID_PRIVATE);
|
||||
protectedCB.setSelected(b.id == ID_PROTECTED);
|
||||
publicCB.setSelected(b.id == ID_PUBLIC);
|
||||
if (b.id >= 0) {
|
||||
privateCB.setSelected(b.id == ID_PRIVATE);
|
||||
protectedCB.setSelected(b.id == ID_PROTECTED);
|
||||
publicCB.setSelected(b.id == ID_PUBLIC);
|
||||
|
||||
AccessMode curMode = b.id == ID_PRIVATE ? AccessMode.PRIVATE : b.id == ID_PROTECTED ? AccessMode.PROTECTED : AccessMode.PUBLIC;
|
||||
te.setAccessMode(curMode);
|
||||
AccessMode curMode = b.id == ID_PRIVATE ? AccessMode.PRIVATE : b.id == ID_PROTECTED ? AccessMode.PROTECTED : AccessMode.PUBLIC;
|
||||
te.setAccessMode(curMode);
|
||||
BlockCoord bc = te.getLocation();
|
||||
PacketAccessMode p = new PacketAccessMode(bc.x, bc.y, bc.z, curMode);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
} else if (b == visibleCB) {
|
||||
boolean visible = visibleCB.isSelected();
|
||||
te.setVisible(visible);
|
||||
BlockCoord bc = te.getLocation();
|
||||
PacketVisibility p = new PacketVisibility(bc.x, bc.y, bc.z, visible);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
}
|
||||
|
||||
BlockCoord bc = te.getLocation();
|
||||
PacketAccessMode p = new PacketAccessMode(bc.x, bc.y, bc.z, curMode);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -112,6 +135,7 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
publicCB.onGuiInit();
|
||||
privateCB.onGuiInit();
|
||||
protectedCB.onGuiInit();
|
||||
visibleCB.onGuiInit();
|
||||
|
||||
tf.setMaxStringLength(32);
|
||||
tf.setFocused(true);
|
||||
|
||||
@@ -5,19 +5,15 @@ import java.awt.Color;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.enderio.core.client.render.ColorUtil;
|
||||
import com.enderio.core.client.render.RenderUtil;
|
||||
import com.enderio.core.common.network.MessageTileNBT;
|
||||
|
||||
import crazypants.enderio.EnderIO;
|
||||
import crazypants.enderio.api.teleport.ITravelAccessable;
|
||||
import crazypants.enderio.gui.GuiContainerBaseEIO;
|
||||
import crazypants.enderio.network.PacketHandler;
|
||||
|
||||
public class GuiTravelAuth extends GuiContainerBaseEIO {
|
||||
|
||||
@@ -51,9 +47,6 @@ public class GuiTravelAuth extends GuiContainerBaseEIO {
|
||||
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||
ContainerTravelAuth poo = (ContainerTravelAuth) inventorySlots;
|
||||
if(ta.authoriseUser(player, poo.getInv().getInventory())) {
|
||||
TileEntity te = ((TileEntity) ta);
|
||||
PacketHandler.INSTANCE.sendToServer(new MessageTileNBT(te));
|
||||
|
||||
this.mc.displayGuiScreen((GuiScreen) null);
|
||||
this.mc.setIngameFocus();
|
||||
} else {
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TravelController {
|
||||
|
||||
private int delayTimer = 0;
|
||||
|
||||
private int timer = Config.travelAnchorCooldown;
|
||||
private final int timer = Config.travelAnchorCooldown;
|
||||
|
||||
private boolean tempJump;
|
||||
|
||||
@@ -71,6 +71,8 @@ public class TravelController {
|
||||
|
||||
private boolean showTargets = false;
|
||||
|
||||
private boolean insufficientPower;
|
||||
|
||||
public BlockCoord onBlockCoord;
|
||||
|
||||
public BlockCoord selectedCoord;
|
||||
@@ -211,15 +213,17 @@ public class TravelController {
|
||||
}
|
||||
|
||||
private boolean doBlinkAround(EntityPlayer player, Vector3d sample, boolean conserveMomentum) {
|
||||
if(doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y) - 1, (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
if(doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y), (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
if(doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y) + 1, (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
if (!Config.travelStaffSearchOptimize) {
|
||||
if (doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y) - 1, (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -307,23 +311,25 @@ public class TravelController {
|
||||
if((input.jump && !wasJumping && onBlock && selectedCoord != null && delayTimer == 0)
|
||||
|| (input.sneak && !wasSneaking && onBlock && selectedCoord != null && delayTimer == 0 && Config.travelAnchorSneak)) {
|
||||
|
||||
onInput(player);
|
||||
delayTimer = timer;
|
||||
if (onInput(player)) {
|
||||
delayTimer = timer;
|
||||
}
|
||||
}
|
||||
// If there is no selected coordinate and the input is jump, go up
|
||||
if(input.jump && !wasJumping && onBlock && selectedCoord == null && delayTimer == 0) {
|
||||
|
||||
updateVerticalTarget(player, 1);
|
||||
onInput(player);
|
||||
delayTimer = timer;
|
||||
|
||||
if (onInput(player)) {
|
||||
delayTimer = timer;
|
||||
}
|
||||
}
|
||||
|
||||
// If there is no selected coordinate and the input is sneak, go down
|
||||
if(input.sneak && !wasSneaking && onBlock && selectedCoord == null && delayTimer == 0) {
|
||||
updateVerticalTarget(player, -1);
|
||||
onInput(player);
|
||||
delayTimer = timer;
|
||||
if (onInput(player)) {
|
||||
delayTimer = timer;
|
||||
}
|
||||
}
|
||||
|
||||
if(delayTimer != 0) {
|
||||
@@ -333,6 +339,7 @@ public class TravelController {
|
||||
wasJumping = tempJump;
|
||||
wasSneaking = tempSneak;
|
||||
candidates.clear();
|
||||
insufficientPower = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -434,7 +441,11 @@ public class TravelController {
|
||||
requiredPower = (int) (getDistance(player, coord) * source.getPowerCostPerBlockTraveledRF());
|
||||
int canUsePower = getEnergyInTravelItem(staff);
|
||||
if(requiredPower > canUsePower) {
|
||||
player.addChatComponentMessage(new ChatComponentTranslation("enderio.itemTravelStaff.notEnoughPower"));
|
||||
// make sure chat is sent only once per trial
|
||||
if (!insufficientPower) {
|
||||
player.addChatComponentMessage(new ChatComponentTranslation("enderio.itemTravelStaff.notEnoughPower"));
|
||||
insufficientPower = true;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return requiredPower;
|
||||
@@ -604,12 +615,12 @@ public class TravelController {
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private void onInput(EntityClientPlayerMP player) {
|
||||
private boolean onInput(EntityClientPlayerMP player) {
|
||||
|
||||
MovementInput input = player.movementInput;
|
||||
BlockCoord target = TravelController.instance.selectedCoord;
|
||||
if(target == null) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
TileEntity te = player.worldObj.getTileEntity(target.x, target.y, target.z);
|
||||
@@ -618,12 +629,13 @@ public class TravelController {
|
||||
if(ta.getRequiresPassword(player)) {
|
||||
PacketOpenAuthGui p = new PacketOpenAuthGui(target.x, target.y, target.z);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(isTargetEnderIO()) {
|
||||
openEnderIO(null, player.worldObj, player);
|
||||
return true;
|
||||
} else if(Config.travelAnchorEnabled && travelToSelectedTarget(player, TravelSource.BLOCK, false)) {
|
||||
input.jump = false;
|
||||
try {
|
||||
@@ -631,8 +643,9 @@ public class TravelController {
|
||||
} catch (Exception e) {
|
||||
//ignore
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public double getScaleForCandidate(Vector3d loc) {
|
||||
@@ -720,8 +733,11 @@ public class TravelController {
|
||||
int x = MathHelper.floor_double(player.posX);
|
||||
int y = MathHelper.floor_double(player.boundingBox.minY) - 1;
|
||||
int z = MathHelper.floor_double(player.posZ);
|
||||
if(world.getBlock(x, y, z) == EnderIO.blockTravelPlatform) {
|
||||
return new BlockCoord(x, y, z);
|
||||
TileEntity tileEntity = world.getTileEntity(x, y, z);
|
||||
if(tileEntity instanceof ITravelAccessable) {
|
||||
if (((ITravelAccessable) tileEntity).isTravelSource()) {
|
||||
return new BlockCoord(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -2,6 +2,7 @@ package crazypants.enderio.teleport.anchor;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import crazypants.enderio.teleport.packet.PacketVisibility;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
@@ -62,6 +63,7 @@ public class BlockTravelAnchor extends BlockEio implements IGuiHandler, ITileEnt
|
||||
PacketHandler.INSTANCE.registerMessage(PacketDrainStaff.class, PacketDrainStaff.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketOpenAuthGui.class, PacketOpenAuthGui.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketPassword.Handler.class, PacketPassword.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketVisibility.class, PacketVisibility.class, PacketHandler.nextID(), Side.SERVER);
|
||||
|
||||
BlockTravelAnchor result = new BlockTravelAnchor();
|
||||
result.init();
|
||||
|
||||
@@ -44,13 +44,23 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
|
||||
private List<UserIdent> authorisedUsers = new ArrayList<UserIdent>();
|
||||
|
||||
private boolean visible = true;
|
||||
|
||||
private boolean isAuthorisedUser(UserIdent ident) {
|
||||
return authorisedUsers.contains(ident);
|
||||
}
|
||||
|
||||
private boolean isOwnerUser(UserIdent ident) {
|
||||
return owner.equals(ident);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBlockBeAccessed(EntityPlayer playerName) {
|
||||
if(accessMode == AccessMode.PUBLIC) {
|
||||
return true;
|
||||
}
|
||||
// Covers protected and private access modes
|
||||
return owner.equals(playerName.getGameProfile()) || authorisedUsers.contains(playerName.getGameProfile());
|
||||
return isOwnerUser(UserIdent.create(playerName.getGameProfile())) || isAuthorisedUser(UserIdent.create(playerName.getGameProfile()));
|
||||
|
||||
}
|
||||
|
||||
@@ -81,7 +91,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
@Override
|
||||
public boolean getRequiresPassword(EntityPlayer playerName) {
|
||||
return getAccessMode() == AccessMode.PROTECTED && !canUiBeAccessed(playerName)
|
||||
&& !authorisedUsers.contains(PlayerUtil.getPlayerUUID(playerName.getGameProfile().getName()));
|
||||
&& !isAuthorisedUser(UserIdent.create(playerName.getGameProfile()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,7 +105,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
|
||||
@Override
|
||||
public boolean canUiBeAccessed(EntityPlayer playerName) {
|
||||
return owner.equals(playerName.getGameProfile());
|
||||
return isOwnerUser(UserIdent.create(playerName.getGameProfile()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,7 +113,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
if(accessMode != AccessMode.PRIVATE) {
|
||||
return true;
|
||||
}
|
||||
return owner.equals(playerName.getGameProfile());
|
||||
return isOwnerUser(UserIdent.create(playerName.getGameProfile()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -210,6 +220,11 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
//keep behavior the same for blocks placed prior to this update
|
||||
accessMode = AccessMode.PUBLIC;
|
||||
}
|
||||
if (root.hasKey("visible")) {
|
||||
visible = root.getBoolean("visible");
|
||||
} else {
|
||||
visible = true;
|
||||
}
|
||||
if (root.hasKey("placedBy")) {
|
||||
owner = UserIdent.create(root.getString("placedBy"));
|
||||
} else {
|
||||
@@ -264,6 +279,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
@Override
|
||||
protected void writeCustomNBT(NBTTagCompound root) {
|
||||
root.setShort("accessMode", (short) accessMode.ordinal());
|
||||
root.setBoolean("visible", visible);
|
||||
owner.saveToNbt(root, "owner");
|
||||
for (int i = 0; i < password.length; i++) {
|
||||
ItemStack stack = password[i];
|
||||
@@ -308,4 +324,14 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
|
||||
readCustomNBT(pkt.func_148857_g());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,10 @@ public class TravelEntitySpecialRenderer extends TileEntitySpecialRenderer {
|
||||
|
||||
ITravelAccessable ta = (ITravelAccessable) tileentity;
|
||||
|
||||
if (!ta.isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
BlockCoord onBlock = TravelController.instance.onBlockCoord;
|
||||
if(onBlock != null && onBlock.equals(ta.getLocation())) {
|
||||
return;
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package crazypants.enderio.teleport.packet;
|
||||
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import crazypants.enderio.api.teleport.ITravelAccessable;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class PacketVisibility implements IMessage, IMessageHandler<PacketVisibility, IMessage> {
|
||||
int x, y, z;
|
||||
boolean visible;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public PacketVisibility() {}
|
||||
|
||||
public PacketVisibility(int x, int y, int z, boolean visible) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.visible = visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(x);
|
||||
buf.writeInt(y);
|
||||
buf.writeInt(z);
|
||||
buf.writeBoolean(visible);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readInt();
|
||||
y = buf.readInt();
|
||||
z = buf.readInt();
|
||||
visible = buf.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketVisibility message, MessageContext ctx) {
|
||||
EntityPlayer player = ctx.getServerHandler().playerEntity;
|
||||
TileEntity te = player.worldObj.getTileEntity(message.x, message.y, message.z);
|
||||
if(te instanceof ITravelAccessable) {
|
||||
((ITravelAccessable) te).setVisible(message.visible);
|
||||
player.worldObj.markBlockForUpdate(message.x, message.y, message.z);
|
||||
player.worldObj.markTileEntityChunkModified(message.x, message.y, message.z, te);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -419,6 +419,17 @@ public class TileTelePad extends TileTravelAnchor implements IInternalPowerRecei
|
||||
return this;
|
||||
}
|
||||
|
||||
/* ITravelAccessable */
|
||||
@Override
|
||||
public boolean isTravelSource() {
|
||||
return isMaster() && inNetwork();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return super.isVisible() && isTravelSource();
|
||||
}
|
||||
|
||||
/* ITelePad */
|
||||
|
||||
@Override
|
||||
|
||||
@@ -29,7 +29,8 @@ public class ExperienceContainer extends FluidTank {
|
||||
|
||||
public ExperienceContainer(int maxStored) {
|
||||
super(null, 0);
|
||||
maxXp = maxStored;
|
||||
// enforce overflow-safe value
|
||||
maxXp = Math.min(maxStored, XpUtil.liquidToExperience(Integer.MAX_VALUE));
|
||||
}
|
||||
|
||||
public int getMaximumExperiance() {
|
||||
|
||||
@@ -1158,6 +1158,9 @@ enderio.gui.travelAccessable.ok=Authorise
|
||||
enderio.gui.travelAccessable.skipLocked=Skipped locked anchor, use targeted teleport.
|
||||
enderio.gui.travelAccessable.skipObstructed=Skipped obstructed anchor.
|
||||
enderio.gui.travelAccessable.skipPrivate=Skipped private anchor.
|
||||
enderio.gui.travelAccessable.tooltip.visible=Visibility
|
||||
enderio.gui.travelAccessable.tooltip.visible.desc1=When off, you cannot see this block through other blocks.
|
||||
enderio.gui.travelAccessable.tooltip.visible.desc2=Handy for use as elevators.
|
||||
|
||||
enderio.gui.telepad.configure.travel=Travel Settings
|
||||
enderio.gui.telepad.configure.telepad=Telepad Settings
|
||||
@@ -1240,7 +1243,7 @@ enderio.weatherObelisk.fuelTank=Barometric Flux Tank
|
||||
|
||||
#Enchants
|
||||
enchantment.enderio.soulBound=Soulbound
|
||||
description.enchantment.enderio.soulBound=Prevents item from being lost on death
|
||||
description.enchantment.enderio.soulBound=When the player dies the item/tool/armor will be kept in the inventory and not drop on the ground.
|
||||
|
||||
#Configuration
|
||||
enderio.config.title=Ender IO Configuration
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 37 KiB |
Reference in new issue
Block a user