尝试移植1.21
This commit is contained in:
parent
69c263fe39
commit
23df60f1b3
2279 changed files with 598 additions and 625580 deletions
334
build.gradle
334
build.gradle
|
@ -1,92 +1,30 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'eclipse'
|
|
||||||
id 'idea'
|
id 'idea'
|
||||||
id 'net.minecraftforge.gradle' version '[6.0,6.2)'
|
|
||||||
id 'org.spongepowered.mixin' version '0.7.+'
|
id 'java-library'
|
||||||
id 'org.parchmentmc.librarian.forgegradle' version '1.+'
|
id 'maven-publish'
|
||||||
|
id 'net.neoforged.moddev' version '1.0.21'
|
||||||
}
|
}
|
||||||
|
|
||||||
def getGitCommitHash() {
|
tasks.named('wrapper', Wrapper).configure {
|
||||||
def stdout = new ByteArrayOutputStream()
|
// Define wrapper values here so as to not have to always do so when updating gradlew.properties.
|
||||||
exec {
|
// Switching this to Wrapper.DistributionType.ALL will download the full gradle sources that comes with
|
||||||
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
// documentation attached on cursor hover of gradle classes and methods. However, this comes with increased
|
||||||
standardOutput = stdout
|
// file size for Gradle. If you do switch this to ALL, run the Gradle wrapper task twice afterwards.
|
||||||
}
|
// (Verify by checking gradle/wrapper/gradle-wrapper.properties to see if distributionUrl now points to `-all`)
|
||||||
return stdout.toString().trim()
|
distributionType = Wrapper.DistributionType.BIN
|
||||||
}
|
}
|
||||||
|
|
||||||
version = "${mod_version}-SNAPSHOT-${getGitCommitHash()}"
|
version = '0.6.5'
|
||||||
group = 'com.atsushio.superbwarfare'
|
group = 'com.atsuishio.superbwarfare'
|
||||||
|
|
||||||
base {
|
|
||||||
archivesName = mod_id
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain.languageVersion = JavaLanguageVersion.of(17)
|
|
||||||
}
|
|
||||||
|
|
||||||
minecraft {
|
|
||||||
mappings channel: 'parchment', version: '2023.08.13-1.20.1'
|
|
||||||
|
|
||||||
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
|
|
||||||
|
|
||||||
copyIdeResources = true
|
|
||||||
|
|
||||||
runs {
|
|
||||||
configureEach {
|
|
||||||
workingDirectory project.file('run')
|
|
||||||
|
|
||||||
property 'forge.logging.markers', 'REGISTRIES'
|
|
||||||
property 'forge.logging.console.level', 'info'
|
|
||||||
|
|
||||||
property 'geckolib.disable_examples', 'true'
|
|
||||||
|
|
||||||
mods {
|
|
||||||
"${mod_id}" {
|
|
||||||
source sourceSets.main
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
client {
|
|
||||||
property 'forge.enabledGameTestNamespaces', mod_id
|
|
||||||
property 'mixin.env.remapRefMap', 'true'
|
|
||||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
||||||
property 'geckolib.disable_examples', 'true'
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
property 'forge.enabledGameTestNamespaces', mod_id
|
|
||||||
property 'mixin.env.remapRefMap', 'true'
|
|
||||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
||||||
}
|
|
||||||
|
|
||||||
data {
|
|
||||||
property 'mixin.env.remapRefMap', 'true'
|
|
||||||
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
|
|
||||||
|
|
||||||
args '--mod', 'superbwarfare', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven {
|
mavenLocal()
|
||||||
url = "https://maven.theillusivec4.top/"
|
|
||||||
}
|
maven { url = "https://maven.theillusivec4.top/" }
|
||||||
maven {
|
maven { url = 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' }
|
||||||
url = 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/'
|
maven { url = "https://maven.blamejared.com/" }
|
||||||
}
|
maven { url = "https://maven.shedaniel.me/" }
|
||||||
maven {
|
|
||||||
name = "Jared's maven"
|
|
||||||
url = "https://maven.blamejared.com/"
|
|
||||||
}
|
|
||||||
maven {
|
|
||||||
url "https://maven.shedaniel.me/"
|
|
||||||
}
|
|
||||||
maven {
|
maven {
|
||||||
url "https://cursemaven.com"
|
url "https://cursemaven.com"
|
||||||
content {
|
content {
|
||||||
|
@ -95,84 +33,204 @@ repositories {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
base.archivesName = mod_id
|
||||||
|
|
||||||
|
// Mojang ships Java 21 to end users starting in 1.20.5, so mods should target Java 21.
|
||||||
|
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
|
||||||
|
|
||||||
|
neoForge {
|
||||||
|
// Specify the version of NeoForge to use.
|
||||||
|
version = project.neo_version
|
||||||
|
|
||||||
|
parchment {
|
||||||
|
mappingsVersion = project.parchment_mappings_version
|
||||||
|
minecraftVersion = project.parchment_minecraft_version
|
||||||
|
}
|
||||||
|
|
||||||
|
// This line is optional. Access Transformers are automatically detected
|
||||||
|
// accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg')
|
||||||
|
|
||||||
|
// Default run configurations.
|
||||||
|
// These can be tweaked, removed, or duplicated as needed.
|
||||||
|
runs {
|
||||||
|
client {
|
||||||
|
client()
|
||||||
|
|
||||||
|
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
|
||||||
|
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
server()
|
||||||
|
programArgument '--nogui'
|
||||||
|
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||||
|
}
|
||||||
|
|
||||||
|
// This run config launches GameTestServer and runs all registered gametests, then exits.
|
||||||
|
// By default, the server will crash when no gametests are provided.
|
||||||
|
// The gametest system is also enabled by default for other run configs under the /test command.
|
||||||
|
gameTestServer {
|
||||||
|
type = "gameTestServer"
|
||||||
|
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
|
||||||
|
}
|
||||||
|
|
||||||
|
data {
|
||||||
|
data()
|
||||||
|
|
||||||
|
// example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
|
||||||
|
// gameDirectory = project.file('run-data')
|
||||||
|
|
||||||
|
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
|
||||||
|
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
|
||||||
|
}
|
||||||
|
|
||||||
|
// applies to all the run configs above
|
||||||
|
configureEach {
|
||||||
|
// Recommended logging data for a userdev environment
|
||||||
|
// The markers can be added/remove as needed separated by commas.
|
||||||
|
// "SCAN": For mods scan.
|
||||||
|
// "REGISTRIES": For firing of registry events.
|
||||||
|
// "REGISTRYDUMP": For getting the contents of all registries.
|
||||||
|
systemProperty 'forge.logging.markers', 'REGISTRIES'
|
||||||
|
|
||||||
|
// Recommended logging level for the console
|
||||||
|
// You can set various levels here.
|
||||||
|
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
|
||||||
|
logLevel = org.slf4j.event.Level.DEBUG
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mods {
|
||||||
|
// define mod <-> source bindings
|
||||||
|
// these are used to tell the game which sources are for which mod
|
||||||
|
// mostly optional in a single mod project
|
||||||
|
// but multi mod projects should define one per mod
|
||||||
|
"${mod_id}" {
|
||||||
|
sourceSet(sourceSets.main)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Include resources generated by data generators.
|
||||||
|
sourceSets.main.resources { srcDir 'src/generated/resources' }
|
||||||
|
|
||||||
|
// Sets up a dependency configuration called 'localRuntime'.
|
||||||
|
// This configuration should be used instead of 'runtimeOnly' to declare
|
||||||
|
// a dependency that will be present for runtime testing but that is
|
||||||
|
// "optional", meaning it will not be pulled by dependents of this mod.
|
||||||
|
configurations {
|
||||||
|
runtimeClasspath.extendsFrom localRuntime
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
minecraft 'net.minecraftforge:forge:1.20.1-47.2.0'
|
// What's wrong with you?
|
||||||
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
|
// implementation "software.bernie.geckolib:geckolib-forge-1.21.1:4.7"
|
||||||
|
|
||||||
runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:5.4.2+1.20.1")
|
runtimeOnly "top.theillusivec4.curios:curios-neoforge:9.2.0+1.21.1"
|
||||||
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:5.4.2+1.20.1:api")
|
compileOnly "top.theillusivec4.curios:curios-neoforge:9.2.0+1.21.1:api"
|
||||||
|
|
||||||
implementation fg.deobf('software.bernie.geckolib:geckolib-forge-1.20.1:4.4.6')
|
compileOnly "mezz.jei:jei-1.21.1-common-api:${jei_version}"
|
||||||
|
compileOnly "mezz.jei:jei-1.21.1-neoforge-api:${jei_version}"
|
||||||
|
|
||||||
// 可选mod依赖
|
// implementation "curse.maven:jade-324717:6291517"
|
||||||
|
|
||||||
// JEI相关
|
// // 可选mod依赖
|
||||||
// compile against the JEI API but do not include it at runtime
|
//
|
||||||
compileOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}"))
|
// // JEI相关
|
||||||
compileOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}"))
|
// // compile against the JEI API but do not include it at runtime
|
||||||
// at runtime, use the full JEI jar for Forge
|
// compileOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}"))
|
||||||
runtimeOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}"))
|
// compileOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}"))
|
||||||
|
// // at runtime, use the full JEI jar for Forge
|
||||||
// Cloth Config相关
|
// runtimeOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}"))
|
||||||
implementation fg.deobf("me.shedaniel.cloth:cloth-config-forge:${cloth_config_version}")
|
//
|
||||||
|
// // Cloth Config相关
|
||||||
// Jade相关
|
// implementation fg.deobf("me.shedaniel.cloth:cloth-config-forge:${cloth_config_version}")
|
||||||
implementation fg.deobf("curse.maven:jade-324717:${jade_version}")
|
//
|
||||||
|
// // Jade相关
|
||||||
// 测试用mod
|
// implementation fg.deobf("curse.maven:jade-324717:${jade_version}")
|
||||||
implementation fg.deobf("curse.maven:oculus-581495:6020952")
|
//
|
||||||
implementation fg.deobf("curse.maven:embeddium-908741:5681725")
|
// // 测试用mod
|
||||||
implementation fg.deobf("curse.maven:timeless-and-classics-zero-1028108:6069384")
|
// implementation fg.deobf("curse.maven:oculus-581495:6020952")
|
||||||
implementation fg.deobf("curse.maven:create-328085:6255513")
|
// implementation fg.deobf("curse.maven:embeddium-908741:5681725")
|
||||||
implementation fg.deobf("curse.maven:mmmmmmmmmmmm-225738:6237015")
|
// implementation fg.deobf("curse.maven:timeless-and-classics-zero-1028108:6069384")
|
||||||
implementation fg.deobf("curse.maven:selene-499980:6249659")
|
// implementation fg.deobf("curse.maven:create-328085:6255513")
|
||||||
|
// implementation fg.deobf("curse.maven:mmmmmmmmmmmm-225738:6237015")
|
||||||
|
// implementation fg.deobf("curse.maven:selene-499980:6249659")
|
||||||
}
|
}
|
||||||
|
|
||||||
mixin {
|
//dependencies {
|
||||||
add sourceSets.main, 'mixins.superbwarfare.refmap.json'
|
// Example optional mod dependency with JEI
|
||||||
|
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
|
||||||
|
// compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
|
||||||
|
// compileOnly "mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}"
|
||||||
|
// We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
|
||||||
|
// localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"
|
||||||
|
|
||||||
config 'mixins.superbwarfare.json'
|
// Example mod dependency using a mod jar from ./libs with a flat dir repository
|
||||||
|
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
||||||
|
// The group id is ignored when searching -- in this case, it is "blank"
|
||||||
|
// implementation "blank:coolmod-${mc_version}:${coolmod_version}"
|
||||||
|
|
||||||
debug.verbose = true
|
// Example mod dependency using a file as dependency
|
||||||
debug.export = true
|
// implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar")
|
||||||
dumpTargetOnFailure = true
|
|
||||||
|
|
||||||
quiet
|
// Example project dependency using a sister or child project:
|
||||||
}
|
// implementation project(":myproject")
|
||||||
|
|
||||||
tasks.named('processResources', ProcessResources).configure {
|
// For more info:
|
||||||
|
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||||
|
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||||
|
//}
|
||||||
|
|
||||||
|
// This block of code expands all declared replace properties in the specified resource targets.
|
||||||
|
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
|
||||||
|
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
|
||||||
var replaceProperties = [
|
var replaceProperties = [
|
||||||
minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range,
|
minecraft_version : minecraft_version,
|
||||||
forge_version : forge_version, forge_version_range: forge_version_range,
|
minecraft_version_range: minecraft_version_range,
|
||||||
|
neo_version : neo_version,
|
||||||
|
neo_version_range : neo_version_range,
|
||||||
loader_version_range : loader_version_range,
|
loader_version_range : loader_version_range,
|
||||||
mod_id : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version,
|
mod_id : mod_id,
|
||||||
mod_authors : mod_authors, mod_description: mod_description,
|
mod_name : mod_name,
|
||||||
|
mod_license : mod_license,
|
||||||
|
mod_version : mod_version,
|
||||||
|
mod_authors : mod_authors,
|
||||||
|
mod_description : mod_description
|
||||||
]
|
]
|
||||||
|
|
||||||
inputs.properties replaceProperties
|
inputs.properties replaceProperties
|
||||||
|
expand replaceProperties
|
||||||
|
from "src/main/templates"
|
||||||
|
into "build/generated/sources/modMetadata"
|
||||||
|
}
|
||||||
|
// Include the output of "generateModMetadata" as an input directory for the build
|
||||||
|
// this works with both building through Gradle and the IDE.
|
||||||
|
sourceSets.main.resources.srcDir generateModMetadata
|
||||||
|
// To avoid having to run "generateModMetadata" manually, make it run on every project reload
|
||||||
|
neoForge.ideSyncTask generateModMetadata
|
||||||
|
|
||||||
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
|
// Example configuration to allow publishing using the maven-publish plugin
|
||||||
expand replaceProperties + [project: project]
|
publishing {
|
||||||
|
publications {
|
||||||
|
register('mavenJava', MavenPublication) {
|
||||||
|
from components.java
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
repositories {
|
||||||
tasks.named('jar', Jar).configure {
|
maven {
|
||||||
manifest {
|
url "file://${project.projectDir}/repo"
|
||||||
attributes([
|
}
|
||||||
"Specification-Title" : mod_id,
|
|
||||||
"Specification-Vendor" : mod_authors,
|
|
||||||
"Specification-Version" : "1", // We are version 1 of ourselves
|
|
||||||
"Implementation-Title" : project.name,
|
|
||||||
"Implementation-Version" : project.jar.archiveVersion,
|
|
||||||
"Implementation-Vendor" : mod_authors,
|
|
||||||
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
|
|
||||||
])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the preferred method to reobfuscate your jar file
|
|
||||||
finalizedBy 'reobfJar'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
tasks.withType(JavaCompile).configureEach {
|
||||||
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
|
||||||
|
idea {
|
||||||
|
module {
|
||||||
|
downloadSources = true
|
||||||
|
downloadJavadoc = true
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,11 +1,16 @@
|
||||||
org.gradle.jvmargs=-Xmx3G
|
org.gradle.jvmargs=-Xmx3G
|
||||||
org.gradle.daemon=false
|
org.gradle.daemon=false
|
||||||
|
org.gradle.parallel=true
|
||||||
minecraft_version_range=[1.20.1,1.21)
|
org.gradle.caching=true
|
||||||
minecraft_version=1.20.1
|
org.gradle.configuration-cache=true
|
||||||
forge_version=47.2.0
|
minecraft_version_range=[1.21.1,1.22)
|
||||||
forge_version_range=[47,)
|
minecraft_version=1.21.1
|
||||||
loader_version_range=[47,)
|
neo_version=21.1.77
|
||||||
|
neo_version_range=[21.1.0,)
|
||||||
|
loader_version_range=[4,)
|
||||||
|
# The Minecraft version the Parchment version is for
|
||||||
|
parchment_minecraft_version=1.21.1
|
||||||
|
parchment_mappings_version=2024.11.13
|
||||||
|
|
||||||
mod_id=superbwarfare
|
mod_id=superbwarfare
|
||||||
mod_name=Superb Warfare
|
mod_name=Superb Warfare
|
||||||
|
@ -13,8 +18,7 @@ mod_license=GNU General Public License v3.0
|
||||||
mod_description=A Warfare Mod
|
mod_description=A Warfare Mod
|
||||||
mod_version=0.6.5
|
mod_version=0.6.5
|
||||||
mod_authors=Atsuishio, Roki27, Light_Quanta
|
mod_authors=Atsuishio, Roki27, Light_Quanta
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
jei_version=15.20.0.106
|
jei_version=19.21.0.247
|
||||||
cloth_config_version=11.1.106
|
cloth_config_version=11.1.106
|
||||||
jade_version=4681833
|
jade_version=4681833
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.1.1-bin.zip
|
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.9-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
pluginManagement {
|
pluginManagement {
|
||||||
repositories {
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
maven {
|
maven { url = 'https://maven.neoforged.net/releases' }
|
||||||
name = 'MinecraftForge'
|
|
||||||
url = 'https://maven.minecraftforge.net/'
|
|
||||||
}
|
|
||||||
maven {
|
|
||||||
url = 'https://maven.parchmentmc.org'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
|
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
|
||||||
}
|
}
|
|
@ -1,44 +1,24 @@
|
||||||
package com.atsuishio.superbwarfare;
|
package com.atsuishio.superbwarfare;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
|
import com.atsuishio.superbwarfare.component.ModDataComponents;
|
||||||
import com.atsuishio.superbwarfare.config.ClientConfig;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.config.CommonConfig;
|
import com.atsuishio.superbwarfare.init.ModTabs;
|
||||||
import com.atsuishio.superbwarfare.config.ServerConfig;
|
|
||||||
import com.atsuishio.superbwarfare.event.TACZGunEventHandler;
|
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
|
||||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
|
||||||
import com.atsuishio.superbwarfare.network.message.*;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.neoforged.bus.api.IEventBus;
|
||||||
import net.minecraft.world.item.Items;
|
import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.minecraft.world.item.alchemy.PotionUtils;
|
import net.neoforged.fml.ModContainer;
|
||||||
import net.minecraft.world.item.alchemy.Potions;
|
import net.neoforged.fml.common.Mod;
|
||||||
import net.minecraft.world.item.crafting.Ingredient;
|
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
import net.neoforged.neoforge.common.NeoForge;
|
||||||
import net.minecraftforge.common.brewing.BrewingRecipeRegistry;
|
import net.neoforged.neoforge.event.tick.ServerTickEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.IEventBus;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.ModList;
|
|
||||||
import net.minecraftforge.fml.ModLoadingContext;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
|
||||||
import net.minecraftforge.fml.config.ModConfig;
|
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
|
||||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
|
||||||
import net.minecraftforge.network.NetworkDirection;
|
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
|
||||||
import net.minecraftforge.network.simple.SimpleChannel;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.AbstractMap;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
import java.util.function.Function;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
@Mod(ModUtils.MODID)
|
@Mod(ModUtils.MODID)
|
||||||
public class ModUtils {
|
public class ModUtils {
|
||||||
|
@ -48,55 +28,38 @@ public class ModUtils {
|
||||||
|
|
||||||
public static final Logger LOGGER = LogManager.getLogger(ModUtils.class);
|
public static final Logger LOGGER = LogManager.getLogger(ModUtils.class);
|
||||||
|
|
||||||
public ModUtils() {
|
public ModUtils(IEventBus bus, ModContainer container) {
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.init());
|
// container.registerConfig(ModConfig.Type.CLIENT, ClientConfig.init());
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, CommonConfig.init());
|
// container.registerConfig(ModConfig.Type.COMMON, CommonConfig.init());
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerConfig.init());
|
// container.registerConfig(ModConfig.Type.SERVER, ServerConfig.init());
|
||||||
|
|
||||||
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
|
// ModPerks.register(bus);
|
||||||
|
// ModSerializers.REGISTRY.register(bus);
|
||||||
ModPerks.register(bus);
|
// ModSounds.REGISTRY.register(bus);
|
||||||
ModSerializers.REGISTRY.register(bus);
|
// ModBlocks.REGISTRY.register(bus);
|
||||||
ModSounds.REGISTRY.register(bus);
|
// ModBlockEntities.REGISTRY.register(bus);
|
||||||
ModBlocks.REGISTRY.register(bus);
|
|
||||||
ModBlockEntities.REGISTRY.register(bus);
|
|
||||||
ModItems.register(bus);
|
ModItems.register(bus);
|
||||||
ModEntities.REGISTRY.register(bus);
|
ModDataComponents.register(bus);
|
||||||
ModTabs.TABS.register(bus);
|
ModTabs.TABS.register(bus);
|
||||||
ModMobEffects.REGISTRY.register(bus);
|
// ModEntities.REGISTRY.register(bus);
|
||||||
ModParticleTypes.REGISTRY.register(bus);
|
// ModTabs.TABS.register(bus);
|
||||||
ModPotion.POTIONS.register(bus);
|
// ModMobEffects.REGISTRY.register(bus);
|
||||||
ModMenuTypes.REGISTRY.register(bus);
|
// ModParticleTypes.REGISTRY.register(bus);
|
||||||
ModVillagers.register(bus);
|
// ModPotion.POTIONS.register(bus);
|
||||||
ModRecipes.RECIPE_SERIALIZERS.register(bus);
|
// ModMenuTypes.REGISTRY.register(bus);
|
||||||
|
// ModVillagers.register(bus);
|
||||||
|
// ModRecipes.RECIPE_SERIALIZERS.register(bus);
|
||||||
|
|
||||||
bus.addListener(this::onCommonSetup);
|
// bus.addListener(this::onCommonSetup);
|
||||||
bus.addListener(this::onClientSetup);
|
// bus.addListener(this::onClientSetup);
|
||||||
|
|
||||||
if (ModList.get().isLoaded("tacz")) {
|
NeoForge.EVENT_BUS.register(this);
|
||||||
MinecraftForge.EVENT_BUS.addListener(TACZGunEventHandler::entityHurtByTACZGun);
|
|
||||||
}
|
|
||||||
|
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ResourceLocation loc(String path) {
|
public static ResourceLocation loc(String path) {
|
||||||
return new ResourceLocation(MODID, path);
|
return ResourceLocation.fromNamespaceAndPath(MODID, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String PROTOCOL_VERSION = "1";
|
|
||||||
public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation(MODID, MODID), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
|
|
||||||
private static int messageID = 0;
|
|
||||||
|
|
||||||
public static <T> void addNetworkMessage(Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<NetworkEvent.Context>> messageConsumer) {
|
|
||||||
PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer);
|
|
||||||
messageID++;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> void addNetworkMessage(Class<T> messageType, BiConsumer<T, FriendlyByteBuf> encoder, Function<FriendlyByteBuf, T> decoder, BiConsumer<T, Supplier<NetworkEvent.Context>> messageConsumer, Optional<NetworkDirection> direction) {
|
|
||||||
PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer, direction);
|
|
||||||
messageID++;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> workQueue = new ConcurrentLinkedQueue<>();
|
private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> workQueue = new ConcurrentLinkedQueue<>();
|
||||||
private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> workQueueC = new ConcurrentLinkedQueue<>();
|
private static final Collection<AbstractMap.SimpleEntry<Runnable, Integer>> workQueueC = new ConcurrentLinkedQueue<>();
|
||||||
|
@ -110,8 +73,7 @@ public class ModUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void tick(TickEvent.ServerTickEvent event) {
|
public void tick(ServerTickEvent.Post event) {
|
||||||
if (event.phase == TickEvent.Phase.END) {
|
|
||||||
List<AbstractMap.SimpleEntry<Runnable, Integer>> actions = new ArrayList<>();
|
List<AbstractMap.SimpleEntry<Runnable, Integer>> actions = new ArrayList<>();
|
||||||
workQueue.forEach(work -> {
|
workQueue.forEach(work -> {
|
||||||
work.setValue(work.getValue() - 1);
|
work.setValue(work.getValue() - 1);
|
||||||
|
@ -121,11 +83,9 @@ public class ModUtils {
|
||||||
actions.forEach(e -> e.getKey().run());
|
actions.forEach(e -> e.getKey().run());
|
||||||
workQueue.removeAll(actions);
|
workQueue.removeAll(actions);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void tick(TickEvent.ClientTickEvent event) {
|
public void tick(ClientTickEvent.Post event) {
|
||||||
if (event.phase == TickEvent.Phase.END) {
|
|
||||||
List<AbstractMap.SimpleEntry<Runnable, Integer>> actions = new ArrayList<>();
|
List<AbstractMap.SimpleEntry<Runnable, Integer>> actions = new ArrayList<>();
|
||||||
workQueueC.forEach(work -> {
|
workQueueC.forEach(work -> {
|
||||||
work.setValue(work.getValue() - 1);
|
work.setValue(work.getValue() - 1);
|
||||||
|
@ -135,66 +95,5 @@ public class ModUtils {
|
||||||
actions.forEach(e -> e.getKey().run());
|
actions.forEach(e -> e.getKey().run());
|
||||||
workQueueC.removeAll(actions);
|
workQueueC.removeAll(actions);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void onCommonSetup(final FMLCommonSetupEvent event) {
|
|
||||||
addNetworkMessage(ZoomMessage.class, ZoomMessage::encode, ZoomMessage::decode, ZoomMessage::handler);
|
|
||||||
addNetworkMessage(DoubleJumpMessage.class, DoubleJumpMessage::encode, DoubleJumpMessage::decode, DoubleJumpMessage::handler);
|
|
||||||
addNetworkMessage(GunsDataMessage.class, GunsDataMessage::encode, GunsDataMessage::decode, GunsDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(FireMessage.class, FireMessage::encode, FireMessage::decode, FireMessage::handler);
|
|
||||||
addNetworkMessage(VehicleFireMessage.class, VehicleFireMessage::encode, VehicleFireMessage::decode, VehicleFireMessage::handler);
|
|
||||||
addNetworkMessage(FireModeMessage.class, FireModeMessage::encode, FireModeMessage::decode, FireModeMessage::handler);
|
|
||||||
addNetworkMessage(ReloadMessage.class, ReloadMessage::encode, ReloadMessage::decode, ReloadMessage::handler);
|
|
||||||
addNetworkMessage(PlayerGunKillMessage.class, PlayerGunKillMessage::encode, PlayerGunKillMessage::decode, PlayerGunKillMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(ClientIndicatorMessage.class, ClientIndicatorMessage::encode, ClientIndicatorMessage::decode, ClientIndicatorMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(SensitivityMessage.class, SensitivityMessage::encode, SensitivityMessage::decode, SensitivityMessage::handler);
|
|
||||||
addNetworkMessage(AdjustZoomFovMessage.class, AdjustZoomFovMessage::encode, AdjustZoomFovMessage::decode, AdjustZoomFovMessage::handler);
|
|
||||||
addNetworkMessage(AdjustMortarAngleMessage.class, AdjustMortarAngleMessage::encode, AdjustMortarAngleMessage::decode, AdjustMortarAngleMessage::handler);
|
|
||||||
addNetworkMessage(InteractMessage.class, InteractMessage::encode, InteractMessage::decode, InteractMessage::handler);
|
|
||||||
addNetworkMessage(VehicleMovementMessage.class, VehicleMovementMessage::encode, VehicleMovementMessage::decode, VehicleMovementMessage::handler);
|
|
||||||
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::encode, DroneFireMessage::decode, DroneFireMessage::handler);
|
|
||||||
addNetworkMessage(SimulationDistanceMessage.class, SimulationDistanceMessage::encode, SimulationDistanceMessage::decode, SimulationDistanceMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(GunReforgeMessage.class, GunReforgeMessage::encode, GunReforgeMessage::decode, GunReforgeMessage::handler);
|
|
||||||
addNetworkMessage(SetPerkLevelMessage.class, SetPerkLevelMessage::encode, SetPerkLevelMessage::decode, SetPerkLevelMessage::handler);
|
|
||||||
addNetworkMessage(BreathMessage.class, BreathMessage::encode, BreathMessage::decode, BreathMessage::handler);
|
|
||||||
addNetworkMessage(ModVariables.SavedDataSyncMessage.class, ModVariables.SavedDataSyncMessage::buffer, ModVariables.SavedDataSyncMessage::new, ModVariables.SavedDataSyncMessage::handler);
|
|
||||||
addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler);
|
|
||||||
addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler);
|
|
||||||
addNetworkMessage(ShootMessage.class, ShootMessage::encode, ShootMessage::decode, ShootMessage::handler);
|
|
||||||
addNetworkMessage(LaserShootMessage.class, LaserShootMessage::encode, LaserShootMessage::decode, LaserShootMessage::handler);
|
|
||||||
addNetworkMessage(ShootClientMessage.class, ShootClientMessage::encode, ShootClientMessage::decode, ShootClientMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(ShakeClientMessage.class, ShakeClientMessage::encode, ShakeClientMessage::decode, ShakeClientMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(DrawClientMessage.class, DrawClientMessage::encode, DrawClientMessage::decode, DrawClientMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(EditModeMessage.class, EditModeMessage::encode, EditModeMessage::decode, EditModeMessage::handler);
|
|
||||||
addNetworkMessage(EditMessage.class, EditMessage::encode, EditMessage::decode, EditMessage::handler);
|
|
||||||
addNetworkMessage(SwitchScopeMessage.class, SwitchScopeMessage::encode, SwitchScopeMessage::decode, SwitchScopeMessage::handler);
|
|
||||||
addNetworkMessage(SetFiringParametersMessage.class, SetFiringParametersMessage::encode, SetFiringParametersMessage::decode, SetFiringParametersMessage::handler);
|
|
||||||
addNetworkMessage(ContainerDataMessage.class, ContainerDataMessage::encode, ContainerDataMessage::decode, ContainerDataMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(RadarChangeModeMessage.class, RadarChangeModeMessage::encode, RadarChangeModeMessage::decode, RadarChangeModeMessage::handler);
|
|
||||||
addNetworkMessage(RadarSetParametersMessage.class, RadarSetParametersMessage::encode, RadarSetParametersMessage::decode, RadarSetParametersMessage::handler);
|
|
||||||
addNetworkMessage(LungeMineAttackMessage.class, LungeMineAttackMessage::encode, LungeMineAttackMessage::decode, LungeMineAttackMessage::handler);
|
|
||||||
addNetworkMessage(RadarMenuOpenMessage.class, RadarMenuOpenMessage::encode, RadarMenuOpenMessage::decode, RadarMenuOpenMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(RadarMenuCloseMessage.class, RadarMenuCloseMessage::encode, RadarMenuCloseMessage::decode, RadarMenuCloseMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(RadarSetPosMessage.class, RadarSetPosMessage::encode, RadarSetPosMessage::decode, RadarSetPosMessage::handler);
|
|
||||||
addNetworkMessage(PlayerStopRidingMessage.class, PlayerStopRidingMessage::encode, PlayerStopRidingMessage::decode, PlayerStopRidingMessage::handler);
|
|
||||||
addNetworkMessage(AimVillagerMessage.class, AimVillagerMessage::encode, AimVillagerMessage::decode, AimVillagerMessage::handler);
|
|
||||||
addNetworkMessage(ShowChargingRangeMessage.class, ShowChargingRangeMessage::encode, ShowChargingRangeMessage::decode, ShowChargingRangeMessage::handler);
|
|
||||||
addNetworkMessage(MeleeAttackMessage.class, MeleeAttackMessage::encode, MeleeAttackMessage::decode, MeleeAttackMessage::handler);
|
|
||||||
addNetworkMessage(ResetCameraTypeMessage.class, ResetCameraTypeMessage::encode, ResetCameraTypeMessage::decode, ResetCameraTypeMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
addNetworkMessage(SwitchVehicleWeaponMessage.class, SwitchVehicleWeaponMessage::encode, SwitchVehicleWeaponMessage::decode, SwitchVehicleWeaponMessage::handler);
|
|
||||||
addNetworkMessage(RadarSetTargetMessage.class, RadarSetTargetMessage::encode, RadarSetTargetMessage::decode, RadarSetTargetMessage::handler);
|
|
||||||
addNetworkMessage(ChangeVehicleSeatMessage.class, ChangeVehicleSeatMessage::encode, ChangeVehicleSeatMessage::decode, ChangeVehicleSeatMessage::handler);
|
|
||||||
addNetworkMessage(ClientMotionSyncMessage.class, ClientMotionSyncMessage::encode, ClientMotionSyncMessage::decode, ClientMotionSyncMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
|
||||||
|
|
||||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
|
||||||
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
|
||||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())),
|
|
||||||
Ingredient.of(Items.REDSTONE), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.LONG_SHOCK.get())));
|
|
||||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())),
|
|
||||||
Ingredient.of(Items.GLOWSTONE_DUST), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.STRONG_SHOCK.get())));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onClientSetup(final FMLClientSetupEvent event) {
|
|
||||||
MouseMovementHandler.init();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.core.registries.Registries;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
|
||||||
import net.minecraft.world.damagesource.DamageTypes;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.item.TooltipFlag;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
|
||||||
import net.minecraft.world.level.block.*;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
|
|
||||||
import net.minecraft.world.level.material.FluidState;
|
|
||||||
import net.minecraft.world.level.material.Fluids;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class BarbedWireBlock extends Block {
|
|
||||||
|
|
||||||
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
|
|
||||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
|
||||||
|
|
||||||
public BarbedWireBlock() {
|
|
||||||
super(BlockBehaviour.Properties.of().ignitedByLava().instrument(NoteBlockInstrument.BASS).sound(SoundType.WOOD).strength(10f, 20f).noCollission().speedFactor(0.01f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void appendHoverText(ItemStack itemstack, BlockGetter world, List<Component> list, TooltipFlag flag) {
|
|
||||||
super.appendHoverText(itemstack, world, list, flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return Shapes.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
|
||||||
builder.add(FACING, WATERLOGGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
|
||||||
boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
|
|
||||||
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidState getFluidState(BlockState state) {
|
|
||||||
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState rotate(BlockState state, Rotation rot) {
|
|
||||||
return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState mirror(BlockState state, Mirror mirrorIn) {
|
|
||||||
return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
|
|
||||||
if (state.getValue(WATERLOGGED)) {
|
|
||||||
world.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
|
|
||||||
}
|
|
||||||
return super.updateShape(state, facing, facingState, world, currentPos, facingPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void entityInside(BlockState blockstate, Level world, BlockPos pos, Entity entity) {
|
|
||||||
super.entityInside(blockstate, world, pos, entity);
|
|
||||||
|
|
||||||
if (!(entity instanceof VehicleEntity)) {
|
|
||||||
entity.makeStuckInBlock(Blocks.AIR.defaultBlockState(), new Vec3(0.15, 0.04, 0.15));
|
|
||||||
entity.hurt(new DamageSource(world.registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.CACTUS)), 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.entity.ChargingStationBlockEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.world.Containers;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.InteractionResult;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.*;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class ChargingStationBlock extends BaseEntityBlock {
|
|
||||||
|
|
||||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
|
||||||
public static final BooleanProperty SHOW_RANGE = BooleanProperty.create("show_range");
|
|
||||||
|
|
||||||
public ChargingStationBlock() {
|
|
||||||
super(BlockBehaviour.Properties.of().sound(SoundType.METAL).strength(3.0f).requiresCorrectToolForDrops());
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(SHOW_RANGE, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
|
|
||||||
if (pLevel.isClientSide) {
|
|
||||||
return InteractionResult.SUCCESS;
|
|
||||||
} else {
|
|
||||||
this.openContainer(pLevel, pPos, pPlayer);
|
|
||||||
return InteractionResult.CONSUME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void openContainer(Level pLevel, BlockPos pPos, Player pPlayer) {
|
|
||||||
BlockEntity blockentity = pLevel.getBlockEntity(pPos);
|
|
||||||
if (blockentity instanceof ChargingStationBlockEntity blockEntity) {
|
|
||||||
pPlayer.openMenu(blockEntity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RenderShape getRenderShape(BlockState pState) {
|
|
||||||
return RenderShape.MODEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) {
|
|
||||||
return new ChargingStationBlockEntity(pPos, pState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level pLevel, BlockState pState, BlockEntityType<T> pBlockEntityType) {
|
|
||||||
if (!pLevel.isClientSide) {
|
|
||||||
return createTickerHelper(pBlockEntityType, ModBlockEntities.CHARGING_STATION.get(), ChargingStationBlockEntity::serverTick);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) {
|
|
||||||
if (!pState.is(pNewState.getBlock())) {
|
|
||||||
BlockEntity blockentity = pLevel.getBlockEntity(pPos);
|
|
||||||
if (blockentity instanceof ChargingStationBlockEntity blockEntity) {
|
|
||||||
if (pLevel instanceof ServerLevel serverLevel) {
|
|
||||||
Containers.dropContents(serverLevel, pPos, blockEntity);
|
|
||||||
}
|
|
||||||
pLevel.updateNeighbourForOutputSignal(pPos, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {
|
|
||||||
pBuilder.add(FACING).add(SHOW_RANGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext pContext) {
|
|
||||||
return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite()).setValue(SHOW_RANGE, false);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,208 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
|
||||||
import net.minecraft.ChatFormatting;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.InteractionResult;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.item.BlockItem;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.item.TooltipFlag;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.*;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import javax.annotation.ParametersAreNonnullByDefault;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class ContainerBlock extends BaseEntityBlock {
|
|
||||||
|
|
||||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
|
||||||
public static final BooleanProperty OPENED = BooleanProperty.create("opened");
|
|
||||||
|
|
||||||
public ContainerBlock() {
|
|
||||||
super(BlockBehaviour.Properties.of().sound(SoundType.METAL).strength(3.0f).noOcclusion().requiresCorrectToolForDrops());
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(OPENED, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@ParametersAreNonnullByDefault
|
|
||||||
public @NotNull InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
|
|
||||||
if (pLevel.isClientSide
|
|
||||||
|| pState.getValue(OPENED)
|
|
||||||
|| !(pLevel.getBlockEntity(pPos) instanceof ContainerBlockEntity containerBlockEntity)
|
|
||||||
) return InteractionResult.PASS;
|
|
||||||
|
|
||||||
ItemStack stack = pPlayer.getItemInHand(pHand);
|
|
||||||
if (!stack.is(ModItems.CROWBAR.get())) {
|
|
||||||
pPlayer.displayClientMessage(Component.translatable("des.superbwarfare.container.fail.crowbar"), true);
|
|
||||||
return InteractionResult.PASS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasEntity(pLevel, pPos)) {
|
|
||||||
pPlayer.displayClientMessage(Component.translatable("des.superbwarfare.container.fail.empty"), true);
|
|
||||||
return InteractionResult.PASS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canOpen(pLevel, pPos, containerBlockEntity.entityType, containerBlockEntity.entity)) {
|
|
||||||
pLevel.setBlockAndUpdate(pPos, pState.setValue(OPENED, true));
|
|
||||||
pLevel.playSound(null, BlockPos.containing(pPos.getX(), pPos.getY(), pPos.getZ()), ModSounds.OPEN.get(), SoundSource.BLOCKS, 1, 1);
|
|
||||||
|
|
||||||
return InteractionResult.SUCCESS;
|
|
||||||
} else {
|
|
||||||
pPlayer.displayClientMessage(Component.translatable("des.superbwarfare.container.fail.open"), true);
|
|
||||||
return InteractionResult.PASS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasEntity(Level pLevel, BlockPos pPos) {
|
|
||||||
BlockEntity blockEntity = pLevel.getBlockEntity(pPos);
|
|
||||||
if (!(blockEntity instanceof ContainerBlockEntity containerBlockEntity)) return false;
|
|
||||||
return containerBlockEntity.entity != null || containerBlockEntity.entityType != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean canOpen(Level pLevel, BlockPos pPos, EntityType<?> entityType, Entity entity) {
|
|
||||||
boolean flag = true;
|
|
||||||
|
|
||||||
int w = 0;
|
|
||||||
int h = 0;
|
|
||||||
|
|
||||||
if (entityType != null) {
|
|
||||||
w = (int) (entityType.getDimensions().width / 2 + 1);
|
|
||||||
h = (int) (entityType.getDimensions().height + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (entity != null) {
|
|
||||||
w = (int) (entity.getType().getDimensions().width / 2 + 1);
|
|
||||||
h = (int) (entity.getType().getDimensions().height + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = -w; i < w + 1; i++) {
|
|
||||||
for (int j = 0; j < h; j++) {
|
|
||||||
for (int k = -w; k < w + 1; k++) {
|
|
||||||
if (i == 0 && j == 0 && k == 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pLevel.getBlockState(pPos.offset(i, j, k)).canOcclude()) {
|
|
||||||
flag = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level pLevel, @NotNull BlockState pState, @NotNull BlockEntityType<T> pBlockEntityType) {
|
|
||||||
if (!pLevel.isClientSide) {
|
|
||||||
return createTickerHelper(pBlockEntityType, ModBlockEntities.CONTAINER.get(), ContainerBlockEntity::serverTick);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void appendHoverText(@NotNull ItemStack pStack, @Nullable BlockGetter pLevel, @NotNull List<Component> pTooltip, @NotNull TooltipFlag pFlag) {
|
|
||||||
super.appendHoverText(pStack, pLevel, pTooltip, pFlag);
|
|
||||||
CompoundTag tag = BlockItem.getBlockEntityData(pStack);
|
|
||||||
if (tag != null && tag.contains("EntityType")) {
|
|
||||||
String s = getEntityTranslationKey(tag.getString("EntityType"));
|
|
||||||
pTooltip.add(Component.translatable(s == null ? "des.superbwarfare.container.empty" : s).withStyle(ChatFormatting.GRAY));
|
|
||||||
|
|
||||||
var entityType = EntityType.byString(tag.getString("EntityType")).orElse(null);
|
|
||||||
if (entityType != null) {
|
|
||||||
int w = 0, h = 0;
|
|
||||||
if (pLevel instanceof Level level && tag.contains("Entity")) {
|
|
||||||
var entity = entityType.create(level);
|
|
||||||
if (entity != null) {
|
|
||||||
entity.load(tag.getCompound("Entity"));
|
|
||||||
w = (int) (entity.getType().getDimensions().width + 1);
|
|
||||||
if (w % 2 == 0) w++;
|
|
||||||
h = (int) (entity.getType().getDimensions().height + 1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
w = (int) (entityType.getDimensions().width + 1);
|
|
||||||
if (w % 2 == 0) w++;
|
|
||||||
h = (int) (entityType.getDimensions().height + 1);
|
|
||||||
}
|
|
||||||
if (w != 0 && h != 0) {
|
|
||||||
pTooltip.add(Component.literal(w + " x " + w + " x " + h).withStyle(ChatFormatting.YELLOW));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public static String getEntityTranslationKey(String path) {
|
|
||||||
String[] parts = path.split(":");
|
|
||||||
if (parts.length > 1) {
|
|
||||||
return "entity." + parts[0] + "." + parts[1];
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@ParametersAreNonnullByDefault
|
|
||||||
public @NotNull VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return state.getValue(OPENED) ? box(1, 0, 1, 15, 14, 15) : box(0, 0, 0, 16, 15, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull RenderShape getRenderShape(@NotNull BlockState state) {
|
|
||||||
return RenderShape.ENTITYBLOCK_ANIMATED;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockEntity newBlockEntity(@NotNull BlockPos blockPos, @NotNull BlockState blockState) {
|
|
||||||
return new ContainerBlockEntity(blockPos, blockState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
|
||||||
builder.add(FACING).add(OPENED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
|
||||||
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(OPENED, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@ParametersAreNonnullByDefault
|
|
||||||
public @NotNull ItemStack getCloneItemStack(BlockGetter pLevel, BlockPos pPos, BlockState pState) {
|
|
||||||
ItemStack itemstack = super.getCloneItemStack(pLevel, pPos, pState);
|
|
||||||
pLevel.getBlockEntity(pPos, ModBlockEntities.CONTAINER.get()).ifPresent((blockEntity) -> blockEntity.saveToItem(itemstack));
|
|
||||||
return itemstack;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,70 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.entity.CreativeChargingStationBlockEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.*;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class CreativeChargingStationBlock extends BaseEntityBlock {
|
|
||||||
|
|
||||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
|
||||||
|
|
||||||
public CreativeChargingStationBlock() {
|
|
||||||
super(Properties.of().sound(SoundType.METAL).strength(3.0f).requiresCorrectToolForDrops());
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RenderShape getRenderShape(BlockState pState) {
|
|
||||||
return RenderShape.MODEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) {
|
|
||||||
return new CreativeChargingStationBlockEntity(pPos, pState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level pLevel, BlockState pState, BlockEntityType<T> pBlockEntityType) {
|
|
||||||
if (!pLevel.isClientSide) {
|
|
||||||
return createTickerHelper(pBlockEntityType, ModBlockEntities.CREATIVE_CHARGING_STATION.get(), (pLevel1, pPos, pState1, blockEntity) -> CreativeChargingStationBlockEntity.serverTick(blockEntity));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) {
|
|
||||||
if (!pState.is(pNewState.getBlock())) {
|
|
||||||
BlockEntity blockentity = pLevel.getBlockEntity(pPos);
|
|
||||||
if (blockentity instanceof CreativeChargingStationBlockEntity) {
|
|
||||||
pLevel.updateNeighbourForOutputSignal(pPos, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {
|
|
||||||
pBuilder.add(FACING);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext pContext) {
|
|
||||||
return this.defaultBlockState().setValue(FACING, pContext.getHorizontalDirection().getOpposite());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,84 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.world.entity.Mob;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.SoundType;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
|
|
||||||
import net.minecraft.world.level.material.FluidState;
|
|
||||||
import net.minecraft.world.level.material.Fluids;
|
|
||||||
import net.minecraft.world.level.material.PushReaction;
|
|
||||||
import net.minecraft.world.level.pathfinder.BlockPathTypes;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class DragonTeethBlock extends Block {
|
|
||||||
|
|
||||||
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
|
|
||||||
|
|
||||||
public DragonTeethBlock() {
|
|
||||||
super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(25f, 500f).requiresCorrectToolForDrops().pushReaction(PushReaction.BLOCK).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(WATERLOGGED, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return Shapes.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return Shapes.or(box(2, 0, 2, 14, 25, 14));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockPathTypes getBlockPathType(BlockState state, BlockGetter world, BlockPos pos, Mob entity) {
|
|
||||||
return BlockPathTypes.LAVA;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
|
||||||
builder.add(WATERLOGGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
|
||||||
boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
|
|
||||||
return this.defaultBlockState().setValue(WATERLOGGED, flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidState getFluidState(BlockState state) {
|
|
||||||
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
|
|
||||||
if (state.getValue(WATERLOGGED)) {
|
|
||||||
world.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
|
|
||||||
}
|
|
||||||
return super.updateShape(state, facing, facingState, world, currentPos, facingPos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.entity.FuMO25BlockEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.InteractionResult;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.Block;
|
|
||||||
import net.minecraft.world.level.block.EntityBlock;
|
|
||||||
import net.minecraft.world.level.block.RenderShape;
|
|
||||||
import net.minecraft.world.level.block.SoundType;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class FuMO25Block extends Block implements EntityBlock {
|
|
||||||
|
|
||||||
public static final BooleanProperty POWERED = BooleanProperty.create("powered");
|
|
||||||
|
|
||||||
public FuMO25Block() {
|
|
||||||
super(BlockBehaviour.Properties.of().sound(SoundType.METAL).strength(3.0f).requiresCorrectToolForDrops());
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(POWERED, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
|
|
||||||
if (pLevel.isClientSide) {
|
|
||||||
return InteractionResult.SUCCESS;
|
|
||||||
} else {
|
|
||||||
BlockEntity blockentity = pLevel.getBlockEntity(pPos);
|
|
||||||
if (blockentity instanceof FuMO25BlockEntity blockEntity) {
|
|
||||||
pPlayer.openMenu(blockEntity);
|
|
||||||
}
|
|
||||||
return InteractionResult.CONSUME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) {
|
|
||||||
return Shapes.or(box(1, 0, 1, 15, 6, 15), box(6, 6, 6, 10, 58, 10));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RenderShape getRenderShape(BlockState pState) {
|
|
||||||
return RenderShape.ENTITYBLOCK_ANIMATED;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) {
|
|
||||||
return new FuMO25BlockEntity(pPos, pState);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level pLevel, BlockState pState, BlockEntityType<T> pBlockEntityType) {
|
|
||||||
if (!pLevel.isClientSide) {
|
|
||||||
return createTickerHelper(pBlockEntityType, ModBlockEntities.FUMO_25.get(), FuMO25BlockEntity::serverTick);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
protected static <E extends BlockEntity, A extends BlockEntity> BlockEntityTicker<A> createTickerHelper(BlockEntityType<A> pServerType, BlockEntityType<E> pClientType, BlockEntityTicker<? super E> pTicker) {
|
|
||||||
return pClientType == pServerType ? (BlockEntityTicker<A>) pTicker : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState pNewState, boolean pMovedByPiston) {
|
|
||||||
if (!pState.is(pNewState.getBlock())) {
|
|
||||||
BlockEntity blockentity = pLevel.getBlockEntity(pPos);
|
|
||||||
if (blockentity instanceof FuMO25BlockEntity) {
|
|
||||||
pLevel.updateNeighbourForOutputSignal(pPos, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onRemove(pState, pLevel, pPos, pNewState, pMovedByPiston);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> pBuilder) {
|
|
||||||
pBuilder.add(POWERED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext pContext) {
|
|
||||||
return this.defaultBlockState().setValue(POWERED, false);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,125 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.entity.TargetEntity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
|
||||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
|
||||||
import net.minecraft.world.level.block.*;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
|
|
||||||
import net.minecraft.world.level.material.FluidState;
|
|
||||||
import net.minecraft.world.level.material.Fluids;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class JumpPadBlock extends Block {
|
|
||||||
|
|
||||||
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
|
|
||||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
|
||||||
|
|
||||||
public JumpPadBlock() {
|
|
||||||
super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(3f, 8f).noCollission().noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return Shapes.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return switch (state.getValue(FACING)) {
|
|
||||||
default ->
|
|
||||||
Shapes.or(box(0, 0, 0, 16, 3, 16), box(-0.25, -0.1, -0.25, 2, 3.25, 2), box(14, -0.1, -0.25, 16.25, 3.25, 2), box(14, -0.1, 14, 16.25, 3.25, 16.25), box(-0.25, -0.1, 14, 2, 3.25, 16.25), box(1, 3, 1, 15, 4, 15));
|
|
||||||
case NORTH ->
|
|
||||||
Shapes.or(box(0, 0, 0, 16, 3, 16), box(14, -0.1, 14, 16.25, 3.25, 16.25), box(-0.25, -0.1, 14, 2, 3.25, 16.25), box(-0.25, -0.1, -0.25, 2, 3.25, 2), box(14, -0.1, -0.25, 16.25, 3.25, 2), box(1, 3, 1, 15, 4, 15));
|
|
||||||
case EAST ->
|
|
||||||
Shapes.or(box(0, 0, 0, 16, 3, 16), box(-0.25, -0.1, 14, 2, 3.25, 16.25), box(-0.25, -0.1, -0.25, 2, 3.25, 2), box(14, -0.1, -0.25, 16.25, 3.25, 2), box(14, -0.1, 14, 16.25, 3.25, 16.25), box(1, 3, 1, 15, 4, 15));
|
|
||||||
case WEST ->
|
|
||||||
Shapes.or(box(0, 0, 0, 16, 3, 16), box(14, -0.1, -0.25, 16.25, 3.25, 2), box(14, -0.1, 14, 16.25, 3.25, 16.25), box(-0.25, -0.1, 14, 2, 3.25, 16.25), box(-0.25, -0.1, -0.25, 2, 3.25, 2), box(1, 3, 1, 15, 4, 15));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
|
||||||
builder.add(FACING, WATERLOGGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
|
||||||
boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
|
|
||||||
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidState getFluidState(BlockState state) {
|
|
||||||
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState rotate(BlockState state, Rotation rot) {
|
|
||||||
return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState mirror(BlockState state, Mirror mirrorIn) {
|
|
||||||
return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
|
|
||||||
if (state.getValue(WATERLOGGED)) {
|
|
||||||
world.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
|
|
||||||
}
|
|
||||||
return super.updateShape(state, facing, facingState, world, currentPos, facingPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void entityInside(BlockState blockstate, Level level, BlockPos pos, Entity entity) {
|
|
||||||
super.entityInside(blockstate, level, pos, entity);
|
|
||||||
|
|
||||||
// 禁止套娃
|
|
||||||
if (entity instanceof TargetEntity || entity instanceof CannonEntity) return;
|
|
||||||
|
|
||||||
if (entity.isShiftKeyDown()) {
|
|
||||||
if (entity.onGround()) {
|
|
||||||
entity.setDeltaMovement(new Vec3(5 * entity.getLookAngle().x, 1.5, 5 * entity.getLookAngle().z));
|
|
||||||
} else {
|
|
||||||
entity.setDeltaMovement(new Vec3(1.8 * entity.getLookAngle().x, 1.5, 1.8 * entity.getLookAngle().z));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
entity.setDeltaMovement(new Vec3(0.7 * entity.getDeltaMovement().x(), 1.7, 0.7 * entity.getDeltaMovement().z()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!level.isClientSide()) {
|
|
||||||
level.playSound(null, BlockPos.containing(pos.getX(), pos.getY(), pos.getZ()), ModSounds.JUMP.get(), SoundSource.BLOCKS, 1, 1);
|
|
||||||
} else {
|
|
||||||
level.playLocalSound(pos.getX(), pos.getY(), pos.getZ(), ModSounds.JUMP.get(), SoundSource.BLOCKS, 1, 1, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
|
|
||||||
capability.playerDoubleJump = true;
|
|
||||||
capability.syncPlayerVariables(entity);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,125 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.menu.ReforgingTableMenu;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.stats.Stats;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.InteractionResult;
|
|
||||||
import net.minecraft.world.MenuProvider;
|
|
||||||
import net.minecraft.world.SimpleMenuProvider;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.inventory.ContainerLevelAccess;
|
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
|
||||||
import net.minecraft.world.level.BlockGetter;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.LevelAccessor;
|
|
||||||
import net.minecraft.world.level.block.*;
|
|
||||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.level.block.state.StateDefinition;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
|
|
||||||
import net.minecraft.world.level.block.state.properties.BooleanProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.DirectionProperty;
|
|
||||||
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
|
|
||||||
import net.minecraft.world.level.material.FluidState;
|
|
||||||
import net.minecraft.world.level.material.Fluids;
|
|
||||||
import net.minecraft.world.phys.BlockHitResult;
|
|
||||||
import net.minecraft.world.phys.shapes.CollisionContext;
|
|
||||||
import net.minecraft.world.phys.shapes.Shapes;
|
|
||||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class ReforgingTableBlock extends Block {
|
|
||||||
|
|
||||||
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
|
|
||||||
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
|
|
||||||
private static final Component CONTAINER_TITLE = Component.translatable("container.superbwarfare.reforging_table");
|
|
||||||
|
|
||||||
public ReforgingTableBlock() {
|
|
||||||
super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(2f).lightLevel(s -> 4).hasPostProcess((bs, br, bp) -> true).emissiveRendering((bs, br, bp) -> true));
|
|
||||||
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) {
|
|
||||||
if (pLevel.isClientSide) {
|
|
||||||
return InteractionResult.SUCCESS;
|
|
||||||
} else {
|
|
||||||
pPlayer.openMenu(pState.getMenuProvider(pLevel, pPos));
|
|
||||||
pPlayer.awardStat(Stats.INTERACT_WITH_ANVIL);
|
|
||||||
return InteractionResult.CONSUME;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
|
|
||||||
builder.add(FACING, WATERLOGGED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
return Shapes.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState getStateForPlacement(BlockPlaceContext context) {
|
|
||||||
boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
|
|
||||||
return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()).setValue(WATERLOGGED, flag);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FluidState getFluidState(BlockState state) {
|
|
||||||
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState rotate(BlockState state, Rotation rot) {
|
|
||||||
return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public BlockState mirror(BlockState state, Mirror mirrorIn) {
|
|
||||||
return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
|
|
||||||
Direction direction = state.getValue(FACING);
|
|
||||||
if (direction == Direction.NORTH || direction == Direction.SOUTH) {
|
|
||||||
return Shapes.or(box(0, 0, 0, 16, 1, 16),
|
|
||||||
box(1, 1, 1, 15, 3, 15),
|
|
||||||
box(5, 4, 6.5, 11, 16.6, 9.5));
|
|
||||||
} else {
|
|
||||||
return Shapes.or(box(0, 0, 0, 16, 1, 16),
|
|
||||||
box(1, 1, 1, 15, 3, 15),
|
|
||||||
box(6.5, 4, 5, 9.5, 16.6, 11));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
|
|
||||||
if (state.getValue(WATERLOGGED)) {
|
|
||||||
world.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
|
|
||||||
}
|
|
||||||
return super.updateShape(state, facing, facingState, world, currentPos, facingPos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public MenuProvider getMenuProvider(BlockState pState, Level pLevel, BlockPos pPos) {
|
|
||||||
return new SimpleMenuProvider((i, inventory, player) ->
|
|
||||||
new ReforgingTableMenu(i, inventory, ContainerLevelAccess.create(pLevel, pPos)), CONTAINER_TITLE);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,405 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block.entity;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.ChargingStationBlock;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import com.atsuishio.superbwarfare.menu.ChargingStationMenu;
|
|
||||||
import com.atsuishio.superbwarfare.network.dataslot.ContainerEnergyData;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.core.NonNullList;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
|
||||||
import net.minecraft.world.Container;
|
|
||||||
import net.minecraft.world.ContainerHelper;
|
|
||||||
import net.minecraft.world.MenuProvider;
|
|
||||||
import net.minecraft.world.WorldlyContainer;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.item.ItemEntity;
|
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.item.crafting.RecipeType;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.phys.AABB;
|
|
||||||
import net.minecraftforge.common.ForgeHooks;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
|
||||||
import net.minecraftforge.energy.EnergyStorage;
|
|
||||||
import net.minecraftforge.items.wrapper.SidedInvWrapper;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Energy Data Slot Code based on @GoryMoon's Chargers
|
|
||||||
*/
|
|
||||||
public class ChargingStationBlockEntity extends BlockEntity implements WorldlyContainer, MenuProvider {
|
|
||||||
|
|
||||||
protected static final int SLOT_FUEL = 0;
|
|
||||||
protected static final int SLOT_CHARGE = 1;
|
|
||||||
|
|
||||||
public static final int MAX_ENERGY = 4000000;
|
|
||||||
public static final int MAX_DATA_COUNT = 4;
|
|
||||||
public static final int DEFAULT_FUEL_TIME = 1600;
|
|
||||||
public static final int CHARGE_SPEED = 128;
|
|
||||||
public static final int CHARGE_OTHER_SPEED = 100000;
|
|
||||||
public static final int CHARGE_RADIUS = 8;
|
|
||||||
|
|
||||||
protected NonNullList<ItemStack> items = NonNullList.withSize(2, ItemStack.EMPTY);
|
|
||||||
|
|
||||||
private LazyOptional<EnergyStorage> energyHandler;
|
|
||||||
private LazyOptional<?>[] itemHandlers = SidedInvWrapper.create(this, Direction.UP, Direction.DOWN, Direction.NORTH);
|
|
||||||
|
|
||||||
public int fuelTick = 0;
|
|
||||||
public int maxFuelTick = DEFAULT_FUEL_TIME;
|
|
||||||
public boolean showRange = false;
|
|
||||||
|
|
||||||
protected final ContainerEnergyData dataAccess = new ContainerEnergyData() {
|
|
||||||
public long get(int pIndex) {
|
|
||||||
return switch (pIndex) {
|
|
||||||
case 0 -> ChargingStationBlockEntity.this.fuelTick;
|
|
||||||
case 1 -> ChargingStationBlockEntity.this.maxFuelTick;
|
|
||||||
case 2 -> {
|
|
||||||
AtomicInteger energy = new AtomicInteger();
|
|
||||||
ChargingStationBlockEntity.this.getCapability(ForgeCapabilities.ENERGY).ifPresent(consumer -> energy.set(consumer.getEnergyStored()));
|
|
||||||
yield energy.get();
|
|
||||||
}
|
|
||||||
case 3 -> ChargingStationBlockEntity.this.showRange ? 1 : 0;
|
|
||||||
default -> 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public void set(int pIndex, long pValue) {
|
|
||||||
switch (pIndex) {
|
|
||||||
case 0:
|
|
||||||
ChargingStationBlockEntity.this.fuelTick = (int) pValue;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
ChargingStationBlockEntity.this.maxFuelTick = (int) pValue;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
ChargingStationBlockEntity.this.getCapability(ForgeCapabilities.ENERGY).ifPresent(consumer -> consumer.receiveEnergy((int) pValue, false));
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
ChargingStationBlockEntity.this.showRange = pValue == 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCount() {
|
|
||||||
return MAX_DATA_COUNT;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public ChargingStationBlockEntity(BlockPos pos, BlockState state) {
|
|
||||||
super(ModBlockEntities.CHARGING_STATION.get(), pos, state);
|
|
||||||
|
|
||||||
this.energyHandler = LazyOptional.of(() -> new EnergyStorage(MAX_ENERGY));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void serverTick(Level pLevel, BlockPos pPos, BlockState pState, ChargingStationBlockEntity blockEntity) {
|
|
||||||
if (blockEntity.showRange != pState.getValue(ChargingStationBlock.SHOW_RANGE)) {
|
|
||||||
pLevel.setBlockAndUpdate(pPos, pState.setValue(ChargingStationBlock.SHOW_RANGE, blockEntity.showRange));
|
|
||||||
setChanged(pLevel, pPos, pState);
|
|
||||||
}
|
|
||||||
|
|
||||||
blockEntity.energyHandler.ifPresent(handler -> {
|
|
||||||
int energy = handler.getEnergyStored();
|
|
||||||
if (energy > 0) {
|
|
||||||
blockEntity.chargeEntity(handler);
|
|
||||||
}
|
|
||||||
if (handler.getEnergyStored() > 0) {
|
|
||||||
blockEntity.chargeItemStack(handler);
|
|
||||||
}
|
|
||||||
if (handler.getEnergyStored() > 0) {
|
|
||||||
blockEntity.chargeBlock(handler);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (blockEntity.fuelTick > 0) {
|
|
||||||
blockEntity.fuelTick--;
|
|
||||||
blockEntity.energyHandler.ifPresent(handler -> {
|
|
||||||
int energy = handler.getEnergyStored();
|
|
||||||
if (energy < handler.getMaxEnergyStored()) {
|
|
||||||
handler.receiveEnergy(CHARGE_SPEED, false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (!blockEntity.getItem(SLOT_FUEL).isEmpty()) {
|
|
||||||
AtomicBoolean flag = new AtomicBoolean(false);
|
|
||||||
blockEntity.energyHandler.ifPresent(handler -> {
|
|
||||||
if (handler.getEnergyStored() >= handler.getMaxEnergyStored()) {
|
|
||||||
flag.set(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (flag.get()) return;
|
|
||||||
|
|
||||||
ItemStack fuel = blockEntity.getItem(SLOT_FUEL);
|
|
||||||
int burnTime = ForgeHooks.getBurnTime(fuel, RecipeType.SMELTING);
|
|
||||||
|
|
||||||
if (fuel.getCapability(ForgeCapabilities.ENERGY).isPresent()) {
|
|
||||||
// 优先当作电池处理
|
|
||||||
fuel.getCapability(ForgeCapabilities.ENERGY).ifPresent(itemEnergy -> blockEntity.energyHandler.ifPresent(energy -> {
|
|
||||||
var energyToExtract = Math.min(CHARGE_OTHER_SPEED, energy.getMaxEnergyStored() - energy.getEnergyStored());
|
|
||||||
if (itemEnergy.canExtract() && energy.canReceive()) {
|
|
||||||
energy.receiveEnergy(itemEnergy.extractEnergy(energyToExtract, false), false);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
blockEntity.setChanged();
|
|
||||||
} else if (burnTime > 0) {
|
|
||||||
// 其次尝试作为燃料处理
|
|
||||||
blockEntity.fuelTick = burnTime;
|
|
||||||
blockEntity.maxFuelTick = burnTime;
|
|
||||||
|
|
||||||
if (fuel.hasCraftingRemainingItem()) {
|
|
||||||
if (fuel.getCount() <= 1) {
|
|
||||||
blockEntity.setItem(SLOT_FUEL, fuel.getCraftingRemainingItem());
|
|
||||||
} else {
|
|
||||||
ItemStack copy = fuel.getCraftingRemainingItem().copy();
|
|
||||||
copy.setCount(1);
|
|
||||||
|
|
||||||
ItemEntity itemEntity = new ItemEntity(pLevel,
|
|
||||||
pPos.getX() + 0.5,
|
|
||||||
pPos.getY() + 0.2,
|
|
||||||
pPos.getZ() + 0.5,
|
|
||||||
copy);
|
|
||||||
pLevel.addFreshEntity(itemEntity);
|
|
||||||
|
|
||||||
fuel.shrink(1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fuel.shrink(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
blockEntity.setChanged();
|
|
||||||
} else if (fuel.getItem().isEdible()) {
|
|
||||||
// 最后作为食物处理
|
|
||||||
var properties = fuel.getFoodProperties(null);
|
|
||||||
if (properties == null) return;
|
|
||||||
|
|
||||||
int nutrition = properties.getNutrition();
|
|
||||||
float saturation = properties.getSaturationModifier() * 2.0f * nutrition;
|
|
||||||
int tick = nutrition * 80 + (int) (saturation * 200);
|
|
||||||
|
|
||||||
if (fuel.hasCraftingRemainingItem()) {
|
|
||||||
tick += 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
fuel.shrink(1);
|
|
||||||
|
|
||||||
blockEntity.fuelTick = tick;
|
|
||||||
blockEntity.maxFuelTick = tick;
|
|
||||||
blockEntity.setChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chargeEntity(EnergyStorage handler) {
|
|
||||||
if (this.level == null) return;
|
|
||||||
if (this.level.getGameTime() % 20 != 0) return;
|
|
||||||
|
|
||||||
List<Entity> entities = this.level.getEntitiesOfClass(Entity.class, new AABB(this.getBlockPos()).inflate(CHARGE_RADIUS));
|
|
||||||
entities.forEach(entity -> entity.getCapability(ForgeCapabilities.ENERGY).ifPresent(cap -> {
|
|
||||||
if (cap.canReceive()) {
|
|
||||||
int charged = cap.receiveEnergy(Math.min(handler.getEnergyStored(), CHARGE_OTHER_SPEED * 20), false);
|
|
||||||
handler.extractEnergy(charged, false);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
this.setChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chargeItemStack(EnergyStorage handler) {
|
|
||||||
ItemStack stack = this.getItem(SLOT_CHARGE);
|
|
||||||
if (stack.isEmpty()) return;
|
|
||||||
|
|
||||||
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(consumer -> {
|
|
||||||
if (consumer.getEnergyStored() < consumer.getMaxEnergyStored()) {
|
|
||||||
int charged = consumer.receiveEnergy(Math.min(CHARGE_OTHER_SPEED, handler.getEnergyStored()), false);
|
|
||||||
handler.extractEnergy(Math.min(charged, handler.getEnergyStored()), false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.setChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chargeBlock(EnergyStorage handler) {
|
|
||||||
if (this.level == null) return;
|
|
||||||
|
|
||||||
for (Direction direction : Direction.values()) {
|
|
||||||
var blockEntity = this.level.getBlockEntity(this.getBlockPos().relative(direction));
|
|
||||||
if (blockEntity == null || !blockEntity.getCapability(ForgeCapabilities.ENERGY).isPresent() || blockEntity instanceof ChargingStationBlockEntity) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockEntity.getCapability(ForgeCapabilities.ENERGY).ifPresent(energy -> {
|
|
||||||
if (energy.canReceive() && energy.getEnergyStored() < energy.getMaxEnergyStored()) {
|
|
||||||
int receiveEnergy = energy.receiveEnergy(Math.min(handler.getEnergyStored(), CHARGE_OTHER_SPEED), false);
|
|
||||||
handler.extractEnergy(receiveEnergy, false);
|
|
||||||
|
|
||||||
blockEntity.setChanged();
|
|
||||||
this.setChanged();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public NonNullList<ItemStack> getItems() {
|
|
||||||
return this.items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void load(CompoundTag pTag) {
|
|
||||||
super.load(pTag);
|
|
||||||
|
|
||||||
if (pTag.contains("Energy")) {
|
|
||||||
getCapability(ForgeCapabilities.ENERGY).ifPresent(handler -> ((EnergyStorage) handler).deserializeNBT(pTag.get("Energy")));
|
|
||||||
}
|
|
||||||
this.fuelTick = pTag.getInt("FuelTick");
|
|
||||||
this.maxFuelTick = pTag.getInt("MaxFuelTick");
|
|
||||||
this.showRange = pTag.getBoolean("ShowRange");
|
|
||||||
this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
|
|
||||||
ContainerHelper.loadAllItems(pTag, this.items);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void saveAdditional(CompoundTag pTag) {
|
|
||||||
super.saveAdditional(pTag);
|
|
||||||
|
|
||||||
getCapability(ForgeCapabilities.ENERGY).ifPresent(handler -> pTag.put("Energy", ((EnergyStorage) handler).serializeNBT()));
|
|
||||||
pTag.putInt("FuelTick", this.fuelTick);
|
|
||||||
pTag.putInt("MaxFuelTick", this.maxFuelTick);
|
|
||||||
pTag.putBoolean("ShowRange", this.showRange);
|
|
||||||
ContainerHelper.saveAllItems(pTag, this.items);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int[] getSlotsForFace(Direction pSide) {
|
|
||||||
return new int[]{SLOT_FUEL};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canPlaceItemThroughFace(int pIndex, ItemStack pItemStack, @Nullable Direction pDirection) {
|
|
||||||
return pIndex == SLOT_FUEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canTakeItemThroughFace(int pIndex, ItemStack pStack, Direction pDirection) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getContainerSize() {
|
|
||||||
return this.items.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isEmpty() {
|
|
||||||
for (ItemStack itemstack : this.items) {
|
|
||||||
if (!itemstack.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(int pSlot) {
|
|
||||||
return this.items.get(pSlot);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack removeItem(int pSlot, int pAmount) {
|
|
||||||
return ContainerHelper.removeItem(this.items, pSlot, pAmount);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack removeItemNoUpdate(int pSlot) {
|
|
||||||
return ContainerHelper.takeItem(this.items, pSlot);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItem(int pSlot, ItemStack pStack) {
|
|
||||||
ItemStack itemstack = this.items.get(pSlot);
|
|
||||||
boolean flag = !pStack.isEmpty() && ItemStack.isSameItemSameTags(itemstack, pStack);
|
|
||||||
this.items.set(pSlot, pStack);
|
|
||||||
if (pStack.getCount() > this.getMaxStackSize()) {
|
|
||||||
pStack.setCount(this.getMaxStackSize());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pSlot == 0 && !flag) {
|
|
||||||
this.setChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean stillValid(Player pPlayer) {
|
|
||||||
return Container.stillValidBlockEntity(this, pPlayer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearContent() {
|
|
||||||
this.items.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Component getDisplayName() {
|
|
||||||
return Component.translatable("container.superbwarfare.charging_station");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public AbstractContainerMenu createMenu(int pContainerId, Inventory pPlayerInventory, Player pPlayer) {
|
|
||||||
return new ChargingStationMenu(pContainerId, pPlayerInventory, this, this.dataAccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientboundBlockEntityDataPacket getUpdatePacket() {
|
|
||||||
return ClientboundBlockEntityDataPacket.create(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompoundTag getUpdateTag() {
|
|
||||||
CompoundTag compoundtag = new CompoundTag();
|
|
||||||
ContainerHelper.saveAllItems(compoundtag, this.items, true);
|
|
||||||
compoundtag.putBoolean("ShowRange", this.showRange);
|
|
||||||
return compoundtag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
|
||||||
if (cap == ForgeCapabilities.ENERGY) {
|
|
||||||
return energyHandler.cast();
|
|
||||||
}
|
|
||||||
if (!this.remove && side != null && cap == ForgeCapabilities.ITEM_HANDLER) {
|
|
||||||
if (side == Direction.UP) {
|
|
||||||
return itemHandlers[0].cast();
|
|
||||||
} else if (side == Direction.DOWN) {
|
|
||||||
return itemHandlers[1].cast();
|
|
||||||
} else {
|
|
||||||
return itemHandlers[2].cast();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return super.getCapability(cap, side);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void invalidateCaps() {
|
|
||||||
super.invalidateCaps();
|
|
||||||
for (LazyOptional<?> itemHandler : itemHandlers) itemHandler.invalidate();
|
|
||||||
energyHandler.invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reviveCaps() {
|
|
||||||
super.reviveCaps();
|
|
||||||
this.itemHandlers = SidedInvWrapper.create(this, Direction.UP, Direction.DOWN, Direction.NORTH);
|
|
||||||
this.energyHandler = LazyOptional.of(() -> new EnergyStorage(MAX_ENERGY));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,134 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block.entity;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.ContainerBlock;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.particles.ParticleTypes;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.sounds.SoundEvents;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.item.BlockItem;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import org.joml.Math;
|
|
||||||
import software.bernie.geckolib.animatable.GeoBlockEntity;
|
|
||||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
|
||||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
|
||||||
import software.bernie.geckolib.core.animation.AnimationController;
|
|
||||||
import software.bernie.geckolib.core.animation.AnimationState;
|
|
||||||
import software.bernie.geckolib.core.animation.RawAnimation;
|
|
||||||
import software.bernie.geckolib.core.object.PlayState;
|
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
|
||||||
|
|
||||||
public class ContainerBlockEntity extends BlockEntity implements GeoBlockEntity {
|
|
||||||
|
|
||||||
public EntityType<?> entityType;
|
|
||||||
public Entity entity = null;
|
|
||||||
public int tick = 0;
|
|
||||||
|
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
|
||||||
|
|
||||||
public ContainerBlockEntity(BlockPos pos, BlockState state) {
|
|
||||||
super(ModBlockEntities.CONTAINER.get(), pos, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void serverTick(Level pLevel, BlockPos pPos, BlockState pState, ContainerBlockEntity blockEntity) {
|
|
||||||
if (!pState.getValue(ContainerBlock.OPENED)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockEntity.tick < 20) {
|
|
||||||
blockEntity.tick++;
|
|
||||||
blockEntity.setChanged();
|
|
||||||
|
|
||||||
if (blockEntity.tick == 18) {
|
|
||||||
ParticleTool.sendParticle((ServerLevel) pLevel, ParticleTypes.EXPLOSION, pPos.getX(), pPos.getY() + 1, pPos.getZ(), 40, 1.5, 1.5, 1.5, 1, false);
|
|
||||||
pLevel.playSound(null, pPos, SoundEvents.GENERIC_EXPLODE, SoundSource.BLOCKS, 4.0F, (1.0F + (pLevel.random.nextFloat() - pLevel.random.nextFloat()) * 0.2F) * 0.7F);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (blockEntity.entity != null) {
|
|
||||||
blockEntity.entity.setPos(pPos.getX() + 0.5 + (2 * Math.random() - 1) * 0.1f, pPos.getY() + 0.5 + (2 * Math.random() - 1) * 0.1f, pPos.getZ() + 0.5 + (2 * Math.random() - 1) * 0.1f);
|
|
||||||
pLevel.addFreshEntity(blockEntity.entity);
|
|
||||||
} else if (blockEntity.entityType != null) {
|
|
||||||
var entity = blockEntity.entityType.create(pLevel);
|
|
||||||
if (entity != null) {
|
|
||||||
entity.setPos(pPos.getX() + 0.5 + (2 * Math.random() - 1) * 0.1f, pPos.getY() + 0.5 + (2 * Math.random() - 1) * 0.1f, pPos.getZ() + 0.5 + (2 * Math.random() - 1) * 0.1f);
|
|
||||||
pLevel.addFreshEntity(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pLevel.setBlockAndUpdate(pPos, Blocks.AIR.defaultBlockState());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private PlayState predicate(AnimationState<ContainerBlockEntity> event) {
|
|
||||||
if (this.getBlockState().getValue(ContainerBlock.OPENED)) {
|
|
||||||
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.container.open"));
|
|
||||||
}
|
|
||||||
return PlayState.STOP;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
|
||||||
data.add(new AnimationController<>(this, "controller", 0, this::predicate));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void load(CompoundTag compound) {
|
|
||||||
super.load(compound);
|
|
||||||
if (compound.contains("EntityType")) {
|
|
||||||
this.entityType = EntityType.byString(compound.getString("EntityType")).orElse(null);
|
|
||||||
}
|
|
||||||
if (compound.contains("Entity") && this.entityType != null && this.level != null) {
|
|
||||||
this.entity = this.entityType.create(this.level);
|
|
||||||
if (entity != null) {
|
|
||||||
entity.load(compound.getCompound("Entity"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.tick = compound.getInt("Tick");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveAdditional(CompoundTag compound) {
|
|
||||||
super.saveAdditional(compound);
|
|
||||||
if (this.entity != null) {
|
|
||||||
compound.put("Entity", this.entity.serializeNBT());
|
|
||||||
}
|
|
||||||
if (this.entityType != null) {
|
|
||||||
compound.putString("EntityType", EntityType.getKey(this.entityType).toString());
|
|
||||||
}
|
|
||||||
compound.putInt("Tick", this.tick);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientboundBlockEntityDataPacket getUpdatePacket() {
|
|
||||||
return ClientboundBlockEntityDataPacket.create(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompoundTag getUpdateTag() {
|
|
||||||
return this.saveWithFullMetadata();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveToItem(ItemStack pStack) {
|
|
||||||
CompoundTag tag = new CompoundTag();
|
|
||||||
if (this.entityType != null) {
|
|
||||||
tag.putString("EntityType", EntityType.getKey(this.entityType).toString());
|
|
||||||
}
|
|
||||||
BlockItem.setBlockEntityData(pStack, this.getType(), tag);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,95 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block.entity;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.capability.energy.InfinityEnergyStorage;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraft.world.phys.AABB;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
|
||||||
import net.minecraftforge.energy.IEnergyStorage;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Energy Data Slot Code based on @GoryMoon's Chargers
|
|
||||||
*/
|
|
||||||
public class CreativeChargingStationBlockEntity extends BlockEntity {
|
|
||||||
|
|
||||||
public static final int CHARGE_RADIUS = 8;
|
|
||||||
|
|
||||||
private LazyOptional<IEnergyStorage> energyHandler;
|
|
||||||
|
|
||||||
public CreativeChargingStationBlockEntity(BlockPos pos, BlockState state) {
|
|
||||||
super(ModBlockEntities.CREATIVE_CHARGING_STATION.get(), pos, state);
|
|
||||||
this.energyHandler = LazyOptional.of(InfinityEnergyStorage::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void serverTick(CreativeChargingStationBlockEntity blockEntity) {
|
|
||||||
if (blockEntity.level == null) return;
|
|
||||||
|
|
||||||
blockEntity.energyHandler.ifPresent(handler -> {
|
|
||||||
blockEntity.chargeEntity();
|
|
||||||
blockEntity.chargeBlock();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chargeEntity() {
|
|
||||||
if (this.level == null) return;
|
|
||||||
if (this.level.getGameTime() % 20 != 0) return;
|
|
||||||
|
|
||||||
List<Entity> entities = this.level.getEntitiesOfClass(Entity.class, new AABB(this.getBlockPos()).inflate(CHARGE_RADIUS));
|
|
||||||
entities.forEach(entity -> entity.getCapability(ForgeCapabilities.ENERGY).ifPresent(cap -> {
|
|
||||||
if (cap.canReceive()) {
|
|
||||||
cap.receiveEnergy(Integer.MAX_VALUE, false);
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chargeBlock() {
|
|
||||||
if (this.level == null) return;
|
|
||||||
|
|
||||||
for (Direction direction : Direction.values()) {
|
|
||||||
var blockEntity = this.level.getBlockEntity(this.getBlockPos().relative(direction));
|
|
||||||
if (blockEntity == null
|
|
||||||
|| !blockEntity.getCapability(ForgeCapabilities.ENERGY).isPresent()
|
|
||||||
|| blockEntity instanceof CreativeChargingStationBlockEntity
|
|
||||||
) continue;
|
|
||||||
|
|
||||||
blockEntity.getCapability(ForgeCapabilities.ENERGY).ifPresent(energy -> {
|
|
||||||
if (energy.canReceive() && energy.getEnergyStored() < energy.getMaxEnergyStored()) {
|
|
||||||
energy.receiveEnergy(Integer.MAX_VALUE, false);
|
|
||||||
blockEntity.setChanged();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientboundBlockEntityDataPacket getUpdatePacket() {
|
|
||||||
return ClientboundBlockEntityDataPacket.create(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> @NotNull LazyOptional<T> getCapability(@NotNull Capability<T> cap, Direction side) {
|
|
||||||
return ForgeCapabilities.ENERGY.orEmpty(cap, energyHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void invalidateCaps() {
|
|
||||||
super.invalidateCaps();
|
|
||||||
energyHandler.invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reviveCaps() {
|
|
||||||
super.reviveCaps();
|
|
||||||
this.energyHandler = LazyOptional.of(InfinityEnergyStorage::new);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,247 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.block.entity;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.block.FuMO25Block;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModSounds;
|
|
||||||
import com.atsuishio.superbwarfare.menu.FuMO25Menu;
|
|
||||||
import com.atsuishio.superbwarfare.network.dataslot.ContainerEnergyData;
|
|
||||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import net.minecraft.world.MenuProvider;
|
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
|
||||||
import net.minecraft.world.effect.MobEffects;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
|
||||||
import net.minecraft.world.inventory.ContainerLevelAccess;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
|
||||||
import net.minecraftforge.energy.EnergyStorage;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import software.bernie.geckolib.animatable.GeoBlockEntity;
|
|
||||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
|
||||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class FuMO25BlockEntity extends BlockEntity implements MenuProvider, GeoBlockEntity {
|
|
||||||
|
|
||||||
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
|
||||||
|
|
||||||
public static final int MAX_ENERGY = 1000000;
|
|
||||||
|
|
||||||
// 固定距离,以后有人改动这个需要自行解决GUI渲染问题
|
|
||||||
public static final int DEFAULT_RANGE = 96;
|
|
||||||
public static final int MAX_RANGE = 128;
|
|
||||||
public static final int GLOW_RANGE = 64;
|
|
||||||
|
|
||||||
public static final int DEFAULT_ENERGY_COST = 256;
|
|
||||||
public static final int MAX_ENERGY_COST = 1024;
|
|
||||||
|
|
||||||
public static final int DEFAULT_MIN_ENERGY = 64000;
|
|
||||||
|
|
||||||
public static final int MAX_DATA_COUNT = 5;
|
|
||||||
|
|
||||||
private LazyOptional<EnergyStorage> energyHandler;
|
|
||||||
|
|
||||||
public FuncType type = FuncType.NORMAL;
|
|
||||||
public int time = 0;
|
|
||||||
public boolean powered = false;
|
|
||||||
public int tick = 0;
|
|
||||||
|
|
||||||
protected final ContainerEnergyData dataAccess = new ContainerEnergyData() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long get(int pIndex) {
|
|
||||||
return switch (pIndex) {
|
|
||||||
case 0 -> FuMO25BlockEntity.this.energyHandler.map(EnergyStorage::getEnergyStored).orElse(0);
|
|
||||||
case 1 -> FuMO25BlockEntity.this.type.ordinal();
|
|
||||||
case 2 -> FuMO25BlockEntity.this.time;
|
|
||||||
case 3 -> FuMO25BlockEntity.this.powered ? 1 : 0;
|
|
||||||
case 4 -> FuMO25BlockEntity.this.tick;
|
|
||||||
default -> 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(int pIndex, long pValue) {
|
|
||||||
switch (pIndex) {
|
|
||||||
case 0 ->
|
|
||||||
FuMO25BlockEntity.this.energyHandler.ifPresent(handler -> handler.receiveEnergy((int) pValue, false));
|
|
||||||
case 1 -> FuMO25BlockEntity.this.type = FuncType.values()[(int) pValue];
|
|
||||||
case 2 -> FuMO25BlockEntity.this.time = (int) pValue;
|
|
||||||
case 3 -> FuMO25BlockEntity.this.powered = pValue == 1;
|
|
||||||
case 4 -> FuMO25BlockEntity.this.tick = (int) pValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCount() {
|
|
||||||
return MAX_DATA_COUNT;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public FuMO25BlockEntity(BlockPos pPos, BlockState pBlockState) {
|
|
||||||
super(ModBlockEntities.FUMO_25.get(), pPos, pBlockState);
|
|
||||||
this.energyHandler = LazyOptional.of(() -> new EnergyStorage(MAX_ENERGY));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void serverTick(Level pLevel, BlockPos pPos, BlockState pState, FuMO25BlockEntity blockEntity) {
|
|
||||||
int energy = blockEntity.energyHandler.map(EnergyStorage::getEnergyStored).orElse(0);
|
|
||||||
blockEntity.tick++;
|
|
||||||
|
|
||||||
FuncType funcType = blockEntity.type;
|
|
||||||
int energyCost;
|
|
||||||
if (funcType == FuncType.WIDER) {
|
|
||||||
energyCost = MAX_ENERGY_COST;
|
|
||||||
} else {
|
|
||||||
energyCost = DEFAULT_ENERGY_COST;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (energy < energyCost) {
|
|
||||||
if (pState.getValue(FuMO25Block.POWERED)) {
|
|
||||||
pLevel.setBlockAndUpdate(pPos, pState.setValue(FuMO25Block.POWERED, false));
|
|
||||||
pLevel.playSound(null, pPos, ModSounds.RADAR_SEARCH_END.get(), SoundSource.BLOCKS, 1.0F, 1.0F);
|
|
||||||
blockEntity.powered = false;
|
|
||||||
setChanged(pLevel, pPos, pState);
|
|
||||||
}
|
|
||||||
if (blockEntity.time > 0) {
|
|
||||||
blockEntity.time = 0;
|
|
||||||
blockEntity.setChanged();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!pState.getValue(FuMO25Block.POWERED)) {
|
|
||||||
if (energy >= DEFAULT_MIN_ENERGY) {
|
|
||||||
pLevel.setBlockAndUpdate(pPos, pState.setValue(FuMO25Block.POWERED, true));
|
|
||||||
pLevel.playSound(null, pPos, ModSounds.RADAR_SEARCH_START.get(), SoundSource.BLOCKS, 1.0F, 1.0F);
|
|
||||||
blockEntity.powered = true;
|
|
||||||
setChanged(pLevel, pPos, pState);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
blockEntity.energyHandler.ifPresent(handler -> handler.extractEnergy(energyCost, false));
|
|
||||||
if (blockEntity.tick == 200) {
|
|
||||||
pLevel.playSound(null, pPos, ModSounds.RADAR_SEARCH_IDLE.get(), SoundSource.BLOCKS, 1.0F, 1.0F);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockEntity.time > 0) {
|
|
||||||
if (blockEntity.time % 100 == 0) {
|
|
||||||
blockEntity.setGlowEffect();
|
|
||||||
}
|
|
||||||
blockEntity.time--;
|
|
||||||
blockEntity.setChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockEntity.tick >= 200) {
|
|
||||||
blockEntity.tick = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockEntity.time <= 0 && blockEntity.type != FuncType.NORMAL) {
|
|
||||||
blockEntity.type = FuncType.NORMAL;
|
|
||||||
blockEntity.setChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setGlowEffect() {
|
|
||||||
if (this.type != FuncType.GLOW) return;
|
|
||||||
|
|
||||||
Level level = this.level;
|
|
||||||
if (level == null) return;
|
|
||||||
BlockPos pos = this.getBlockPos();
|
|
||||||
List<Entity> entities = SeekTool.getEntitiesWithinRange(pos, level, GLOW_RANGE);
|
|
||||||
entities.forEach(e -> {
|
|
||||||
if (e instanceof LivingEntity living) {
|
|
||||||
living.addEffect(new MobEffectInstance(MobEffects.GLOWING, 100, 0, true, false));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void load(CompoundTag pTag) {
|
|
||||||
super.load(pTag);
|
|
||||||
|
|
||||||
if (pTag.contains("Energy")) {
|
|
||||||
getCapability(ForgeCapabilities.ENERGY).ifPresent(handler -> ((EnergyStorage) handler).deserializeNBT(pTag.get("Energy")));
|
|
||||||
}
|
|
||||||
this.type = FuncType.values()[Mth.clamp(pTag.getInt("Type"), 0, 3)];
|
|
||||||
this.time = pTag.getInt("Time");
|
|
||||||
this.powered = pTag.getBoolean("Powered");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void saveAdditional(CompoundTag pTag) {
|
|
||||||
super.saveAdditional(pTag);
|
|
||||||
|
|
||||||
getCapability(ForgeCapabilities.ENERGY).ifPresent(handler -> pTag.put("Energy", ((EnergyStorage) handler).serializeNBT()));
|
|
||||||
pTag.putInt("Type", this.type.ordinal());
|
|
||||||
pTag.putInt("Time", this.time);
|
|
||||||
pTag.putBoolean("Powered", this.powered);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Component getDisplayName() {
|
|
||||||
return Component.literal("");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public AbstractContainerMenu createMenu(int pContainerId, Inventory pPlayerInventory, Player pPlayer) {
|
|
||||||
if (this.level == null) return null;
|
|
||||||
return new FuMO25Menu(pContainerId, pPlayerInventory, ContainerLevelAccess.create(this.level, this.getBlockPos()), this.dataAccess);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClientboundBlockEntityDataPacket getUpdatePacket() {
|
|
||||||
return ClientboundBlockEntityDataPacket.create(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
|
|
||||||
if (cap == ForgeCapabilities.ENERGY) {
|
|
||||||
return energyHandler.cast();
|
|
||||||
}
|
|
||||||
return super.getCapability(cap, side);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void invalidateCaps() {
|
|
||||||
super.invalidateCaps();
|
|
||||||
this.energyHandler.invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void reviveCaps() {
|
|
||||||
super.reviveCaps();
|
|
||||||
this.energyHandler = LazyOptional.of(() -> new EnergyStorage(MAX_ENERGY));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar controllerRegistrar) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum FuncType {
|
|
||||||
NORMAL,
|
|
||||||
WIDER,
|
|
||||||
GLOW,
|
|
||||||
GUIDE
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability;
|
|
||||||
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
|
||||||
|
|
||||||
@Mod.EventBusSubscriber()
|
|
||||||
public class CapabilityHandler {
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void registerCapabilities(AttachCapabilitiesEvent<Entity> event) {
|
|
||||||
if (event.getObject() instanceof Player) {
|
|
||||||
event.addCapability(LaserCapability.ID, new LaserCapability.LaserCapabilityProvider());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,101 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
|
||||||
import net.minecraftforge.common.capabilities.ICapabilitySerializable;
|
|
||||||
import net.minecraftforge.common.util.INBTSerializable;
|
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public class LaserCapability {
|
|
||||||
|
|
||||||
public static ResourceLocation ID = ModUtils.loc("laser_capability");
|
|
||||||
|
|
||||||
public interface ILaserCapability extends INBTSerializable<CompoundTag> {
|
|
||||||
|
|
||||||
void init(LaserHandler handler);
|
|
||||||
|
|
||||||
void start();
|
|
||||||
|
|
||||||
void tick();
|
|
||||||
|
|
||||||
void stop();
|
|
||||||
|
|
||||||
void end();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class LaserCapabilityImpl implements ILaserCapability {
|
|
||||||
|
|
||||||
public LaserHandler laserHandler;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void init(LaserHandler handler) {
|
|
||||||
this.laserHandler = handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start() {
|
|
||||||
this.laserHandler.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tick() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void stop() {
|
|
||||||
if (this.laserHandler != null) {
|
|
||||||
this.laserHandler.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void end() {
|
|
||||||
if (this.laserHandler != null) {
|
|
||||||
this.laserHandler.end();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompoundTag serializeNBT() {
|
|
||||||
CompoundTag tag = new CompoundTag();
|
|
||||||
if (this.laserHandler != null) {
|
|
||||||
tag.put("Laser", this.laserHandler.writeNBT());
|
|
||||||
}
|
|
||||||
return tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deserializeNBT(CompoundTag nbt) {
|
|
||||||
if (nbt.contains("Laser") && this.laserHandler != null) {
|
|
||||||
this.laserHandler.readNBT(nbt.getCompound("Laser"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class LaserCapabilityProvider implements ICapabilityProvider, ICapabilitySerializable<CompoundTag> {
|
|
||||||
|
|
||||||
private final LazyOptional<LaserCapabilityImpl> instance = LazyOptional.of(LaserCapabilityImpl::new);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
|
|
||||||
return ModCapabilities.LASER_CAPABILITY.orEmpty(cap, instance.cast());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompoundTag serializeNBT() {
|
|
||||||
return instance.orElseThrow(NullPointerException::new).serializeNBT();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deserializeNBT(CompoundTag nbt) {
|
|
||||||
instance.orElseThrow(NullPointerException::new).deserializeNBT(nbt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,90 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.AbstractLaserEntity;
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
|
||||||
|
|
||||||
public class LaserHandler {
|
|
||||||
|
|
||||||
public boolean isUsing;
|
|
||||||
public final LivingEntity entity;
|
|
||||||
public final AbstractLaserEntity laserEntity;
|
|
||||||
private int tick;
|
|
||||||
|
|
||||||
public LaserHandler(LivingEntity entity, AbstractLaserEntity laserEntity) {
|
|
||||||
this.entity = entity;
|
|
||||||
this.laserEntity = laserEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
this.tick = 0;
|
|
||||||
this.isUsing = true;
|
|
||||||
|
|
||||||
if (this.entity.level() instanceof ServerLevel level) {
|
|
||||||
level.addFreshEntity(this.laserEntity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void tick() {
|
|
||||||
if (this.isUsing) {
|
|
||||||
this.tick++;
|
|
||||||
|
|
||||||
if (this.tick > laserEntity.getDuration()) {
|
|
||||||
this.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 终止光束,并带有淡出效果
|
|
||||||
*/
|
|
||||||
public void stop() {
|
|
||||||
if (!this.isUsing) return;
|
|
||||||
|
|
||||||
this.isUsing = false;
|
|
||||||
this.tick = 0;
|
|
||||||
if (this.laserEntity != null) {
|
|
||||||
this.laserEntity.setDuration(3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 直接终止光束
|
|
||||||
*/
|
|
||||||
public void end() {
|
|
||||||
if (!this.isUsing) return;
|
|
||||||
|
|
||||||
this.isUsing = false;
|
|
||||||
this.tick = 0;
|
|
||||||
if (this.laserEntity != null) {
|
|
||||||
this.laserEntity.discard();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTick() {
|
|
||||||
return this.tick;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompoundTag writeNBT() {
|
|
||||||
CompoundTag compoundTag = new CompoundTag();
|
|
||||||
if (this.isUsing) {
|
|
||||||
compoundTag.putInt("Tick", this.tick);
|
|
||||||
}
|
|
||||||
return compoundTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void readNBT(Tag nbt) {
|
|
||||||
CompoundTag compoundTag = (CompoundTag) nbt;
|
|
||||||
this.isUsing = compoundTag.contains("Tick");
|
|
||||||
if (this.isUsing) {
|
|
||||||
this.tick = compoundTag.getInt("Tick");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isUsable() {
|
|
||||||
return !this.isUsing;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability;
|
|
||||||
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.CapabilityManager;
|
|
||||||
import net.minecraftforge.common.capabilities.CapabilityToken;
|
|
||||||
|
|
||||||
public class ModCapabilities {
|
|
||||||
|
|
||||||
public static final Capability<LaserCapability.ILaserCapability> LASER_CAPABILITY = CapabilityManager.get(new CapabilityToken<>() {
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability.energy;
|
|
||||||
|
|
||||||
import net.minecraftforge.energy.IEnergyStorage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 无限供电能力,纯逆天
|
|
||||||
*/
|
|
||||||
public class InfinityEnergyStorage implements IEnergyStorage {
|
|
||||||
@Override
|
|
||||||
public int receiveEnergy(int maxReceive, boolean simulate) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int extractEnergy(int maxExtract, boolean simulate) {
|
|
||||||
return maxExtract;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnergyStored() {
|
|
||||||
return Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxEnergyStored() {
|
|
||||||
return Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canExtract() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canReceive() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability.energy;
|
|
||||||
|
|
||||||
import net.minecraft.core.Direction;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.ForgeCapabilities;
|
|
||||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
|
||||||
import net.minecraftforge.energy.IEnergyStorage;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class ItemEnergyProvider implements ICapabilityProvider {
|
|
||||||
|
|
||||||
private final LazyOptional<IEnergyStorage> capability;
|
|
||||||
|
|
||||||
public ItemEnergyProvider(ItemStack stack, int energyCapacity) {
|
|
||||||
this.capability = LazyOptional.of(() -> new ItemEnergyStorage(stack, energyCapacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
|
||||||
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction dire) {
|
|
||||||
return ForgeCapabilities.ENERGY.orEmpty(cap, capability);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability.energy;
|
|
||||||
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraftforge.energy.EnergyStorage;
|
|
||||||
|
|
||||||
public class ItemEnergyStorage extends EnergyStorage {
|
|
||||||
|
|
||||||
private static final String NBT_ENERGY = "Energy";
|
|
||||||
|
|
||||||
private final ItemStack stack;
|
|
||||||
|
|
||||||
public ItemEnergyStorage(ItemStack stack, int capacity) {
|
|
||||||
super(capacity, Integer.MAX_VALUE, Integer.MAX_VALUE);
|
|
||||||
|
|
||||||
this.stack = stack;
|
|
||||||
this.energy = stack.hasTag() && stack.getTag().contains(NBT_ENERGY) ? stack.getTag().getInt(NBT_ENERGY) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int receiveEnergy(int maxReceive, boolean simulate) {
|
|
||||||
int received = super.receiveEnergy(maxReceive, simulate);
|
|
||||||
|
|
||||||
if (received > 0 && !simulate) {
|
|
||||||
stack.getOrCreateTag().putInt(NBT_ENERGY, getEnergyStored());
|
|
||||||
}
|
|
||||||
|
|
||||||
return received;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int extractEnergy(int maxExtract, boolean simulate) {
|
|
||||||
int extracted = super.extractEnergy(maxExtract, simulate);
|
|
||||||
|
|
||||||
if (extracted > 0 && !simulate) {
|
|
||||||
stack.getOrCreateTag().putInt(NBT_ENERGY, getEnergyStored());
|
|
||||||
}
|
|
||||||
|
|
||||||
return extracted;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,64 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.capability.energy;
|
|
||||||
|
|
||||||
import net.minecraft.nbt.Tag;
|
|
||||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
|
||||||
import net.minecraftforge.energy.EnergyStorage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自动同步的实体能量存储能力,会和客户端自动同步实体的当前能量值
|
|
||||||
*/
|
|
||||||
public class SyncedEntityEnergyStorage extends EnergyStorage {
|
|
||||||
|
|
||||||
protected SynchedEntityData entityData;
|
|
||||||
protected EntityDataAccessor<Integer> energyDataAccessor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自动同步的实体能量存储能力
|
|
||||||
*
|
|
||||||
* @param capacity 能量上限
|
|
||||||
* @param data 实体的entityData
|
|
||||||
* @param energyDataAccessor 能量的EntityDataAccessor
|
|
||||||
*/
|
|
||||||
public SyncedEntityEnergyStorage(int capacity, SynchedEntityData data, EntityDataAccessor<Integer> energyDataAccessor) {
|
|
||||||
super(capacity, capacity, capacity, 0);
|
|
||||||
|
|
||||||
this.entityData = data;
|
|
||||||
this.energyDataAccessor = energyDataAccessor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int receiveEnergy(int maxReceive, boolean simulate) {
|
|
||||||
var received = super.receiveEnergy(maxReceive, simulate);
|
|
||||||
|
|
||||||
if (!simulate) {
|
|
||||||
entityData.set(energyDataAccessor, this.energy);
|
|
||||||
}
|
|
||||||
|
|
||||||
return received;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int extractEnergy(int maxExtract, boolean simulate) {
|
|
||||||
var extracted = super.extractEnergy(maxExtract, simulate);
|
|
||||||
|
|
||||||
if (!simulate) {
|
|
||||||
entityData.set(energyDataAccessor, energy);
|
|
||||||
}
|
|
||||||
|
|
||||||
return extracted;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnergyStored() {
|
|
||||||
// 获取同步数据,保证客户端能正确获得能量值
|
|
||||||
return entityData.get(energyDataAccessor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deserializeNBT(Tag nbt) {
|
|
||||||
super.deserializeNBT(nbt);
|
|
||||||
entityData.set(energyDataAccessor, energy);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,71 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.model.geom.ModelPart;
|
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import software.bernie.geckolib.cache.object.GeoBone;
|
|
||||||
import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
|
|
||||||
import software.bernie.geckolib.core.animation.AnimationProcessor;
|
|
||||||
|
|
||||||
public class AnimationHelper {
|
|
||||||
|
|
||||||
public static void renderPartOverBone(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn, int packedOverlayIn, float alpha) {
|
|
||||||
renderPartOverBone(model, bone, stack, buffer, packedLightIn, packedOverlayIn, 1.0f, 1.0f, 1.0f, alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void renderPartOverBone(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn, int packedOverlayIn, float r, float g, float b, float a) {
|
|
||||||
setupModelFromBone(model, bone);
|
|
||||||
model.render(stack, buffer, packedLightIn, packedOverlayIn, r, g, b, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setupModelFromBone(ModelPart model, GeoBone bone) {
|
|
||||||
model.setPos(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ());
|
|
||||||
model.xRot = 0.0f;
|
|
||||||
model.yRot = 0.0f;
|
|
||||||
model.zRot = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void renderPartOverBone2(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn, int packedOverlayIn, float alpha) {
|
|
||||||
renderPartOverBone2(model, bone, stack, buffer, packedLightIn, packedOverlayIn, 1.0f, 1.0f, 1.0f, alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void renderPartOverBone2(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn, int packedOverlayIn, float r, float g, float b, float a) {
|
|
||||||
setupModelFromBone2(model, bone);
|
|
||||||
model.render(stack, buffer, packedLightIn, packedOverlayIn, r, g, b, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setupModelFromBone2(ModelPart model, GeoBone bone) {
|
|
||||||
model.setPos(bone.getPivotX(), bone.getPivotY() + 7, bone.getPivotZ());
|
|
||||||
model.xRot = 0.0f;
|
|
||||||
model.yRot = 180 * Mth.DEG_TO_RAD;
|
|
||||||
model.zRot = 180 * Mth.DEG_TO_RAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void handleShellsAnimation(AnimationProcessor<?> animationProcessor, float x, float y) {
|
|
||||||
CoreGeoBone shell1 = animationProcessor.getBone("shell1");
|
|
||||||
CoreGeoBone shell2 = animationProcessor.getBone("shell2");
|
|
||||||
CoreGeoBone shell3 = animationProcessor.getBone("shell3");
|
|
||||||
CoreGeoBone shell4 = animationProcessor.getBone("shell4");
|
|
||||||
CoreGeoBone shell5 = animationProcessor.getBone("shell5");
|
|
||||||
|
|
||||||
ClientEventHandler.handleShells(x, y, shell1, shell2, shell3, shell4, shell5);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void handleReloadShakeAnimation(ItemStack stack, CoreGeoBone main, CoreGeoBone camera, float roll, float pitch) {
|
|
||||||
if (GunsTool.getGunIntTag(stack, "ReloadTime") > 0) {
|
|
||||||
main.setRotX(roll * main.getRotX());
|
|
||||||
main.setRotY(roll * main.getRotY());
|
|
||||||
main.setRotZ(roll * main.getRotZ());
|
|
||||||
main.setPosX(pitch * main.getPosX());
|
|
||||||
main.setPosY(pitch * main.getPosY());
|
|
||||||
main.setPosZ(pitch * main.getPosZ());
|
|
||||||
camera.setRotX(roll * camera.getRotX());
|
|
||||||
camera.setRotY(roll * camera.getRotY());
|
|
||||||
camera.setRotZ(roll * camera.getRotZ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,82 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Code based on @EEEAB's EEEABsMobs and @Mercurows's DreamaticVoyage
|
|
||||||
*/
|
|
||||||
public class AnimationTicker {
|
|
||||||
|
|
||||||
private int tick;
|
|
||||||
private int prevTick;
|
|
||||||
private int duration;
|
|
||||||
|
|
||||||
public AnimationTicker(int duration) {
|
|
||||||
this.tick = 0;
|
|
||||||
this.prevTick = 0;
|
|
||||||
this.duration = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDuration(int duration) {
|
|
||||||
this.tick = 0;
|
|
||||||
this.prevTick = 0;
|
|
||||||
this.duration = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTick() {
|
|
||||||
return this.tick;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isStopped() {
|
|
||||||
return this.tick == 0 && this.prevTick == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEnded() {
|
|
||||||
return this.tick == this.duration || this.prevTick == this.duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPrevTick() {
|
|
||||||
return this.prevTick;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getDuration() {
|
|
||||||
return this.duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changeTimer(boolean flag) {
|
|
||||||
changeTimer(flag, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changeTimer(boolean add, int time) {
|
|
||||||
if (add) {
|
|
||||||
increaseTimer(time);
|
|
||||||
} else {
|
|
||||||
decreaseTimer(time);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void increaseTimer(int time) {
|
|
||||||
int newTime = this.tick + time;
|
|
||||||
if (newTime <= duration && newTime >= 0) {
|
|
||||||
this.tick = newTime;
|
|
||||||
} else {
|
|
||||||
this.tick = newTime < 0 ? 0 : duration;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void decreaseTimer(int time) {
|
|
||||||
if (this.tick - time > 0.0D) {
|
|
||||||
this.tick -= time;
|
|
||||||
} else {
|
|
||||||
this.tick = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updatePrevTimer() {
|
|
||||||
this.prevTick = this.tick;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resetTimer() {
|
|
||||||
this.tick = 0;
|
|
||||||
this.prevTick = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,484 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.compat.CompatHolder;
|
|
||||||
import com.atsuishio.superbwarfare.compat.clothconfig.ClothConfigHelper;
|
|
||||||
import com.atsuishio.superbwarfare.config.client.ReloadConfig;
|
|
||||||
import com.atsuishio.superbwarfare.entity.MortarEntity;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.base.*;
|
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
|
||||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
|
||||||
import com.atsuishio.superbwarfare.network.message.*;
|
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.TraceTool;
|
|
||||||
import com.mojang.blaze3d.platform.InputConstants;
|
|
||||||
import net.minecraft.ChatFormatting;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.sounds.SoundSource;
|
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
import net.minecraft.world.level.Level;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.client.event.InputEvent;
|
|
||||||
import net.minecraftforge.client.settings.KeyConflictContext;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.ModList;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.event.ClientEventHandler.cantFireTime;
|
|
||||||
import static com.atsuishio.superbwarfare.event.ClientEventHandler.drawTime;
|
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
|
|
||||||
public class ClickHandler {
|
|
||||||
|
|
||||||
public static boolean switchZoom = false;
|
|
||||||
|
|
||||||
private static boolean notInGame() {
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
|
||||||
if (mc.player == null) return true;
|
|
||||||
if (mc.getOverlay() != null) return true;
|
|
||||||
if (mc.screen != null) return true;
|
|
||||||
if (!mc.mouseHandler.isMouseGrabbed()) return true;
|
|
||||||
return !mc.isWindowActive();
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onButtonReleased(InputEvent.MouseButton.Pre event) {
|
|
||||||
if (notInGame()) return;
|
|
||||||
if (event.getAction() != InputConstants.RELEASE) return;
|
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int button = event.getButton();
|
|
||||||
if (button == ModKeyMappings.FIRE.getKey().getValue()) {
|
|
||||||
handleWeaponFireRelease();
|
|
||||||
}
|
|
||||||
if (button == ModKeyMappings.HOLD_ZOOM.getKey().getValue()) {
|
|
||||||
handleWeaponZoomRelease();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (button == ModKeyMappings.SWITCH_ZOOM.getKey().getValue() && !switchZoom) {
|
|
||||||
handleWeaponZoomRelease();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onButtonPressed(InputEvent.MouseButton.Pre event) {
|
|
||||||
if (notInGame()) return;
|
|
||||||
if (event.getAction() != InputConstants.PRESS) return;
|
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
if (player.isSpectator()) return;
|
|
||||||
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
|
|
||||||
int button = event.getButton();
|
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.GUN) || stack.is(ModItems.MONITOR.get()) || stack.is(ModItems.LUNGE_MINE.get()) || player.hasEffect(ModMobEffects.SHOCK.get())
|
|
||||||
|| (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))) {
|
|
||||||
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
|
|
||||||
if (stack.is(ModTags.Items.GUN)
|
|
||||||
|| (player.getVehicle() instanceof ArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && !stack.getItem().isEdible())) {
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE) {
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.GUN)
|
|
||||||
|| stack.is(ModItems.MONITOR.get())
|
|
||||||
|| stack.is(ModItems.LUNGE_MINE.get())
|
|
||||||
|| (player.getVehicle() instanceof ArmedVehicleEntity)
|
|
||||||
|| (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get()))) {
|
|
||||||
if (button == ModKeyMappings.FIRE.getKey().getValue()) {
|
|
||||||
handleWeaponFirePress(player, stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (button == ModKeyMappings.HOLD_ZOOM.getKey().getValue()) {
|
|
||||||
handleWeaponZoomPress(player, stack);
|
|
||||||
switchZoom = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (button == ModKeyMappings.SWITCH_ZOOM.getKey().getValue()) {
|
|
||||||
handleWeaponZoomPress(player, stack);
|
|
||||||
switchZoom = !switchZoom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onMouseScrolling(InputEvent.MouseScrollingEvent event) {
|
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
|
|
||||||
if (notInGame()) return;
|
|
||||||
if (player == null) return;
|
|
||||||
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
double scroll = event.getScrollDelta();
|
|
||||||
|
|
||||||
// 未按下shift时,为有武器的载具切换武器
|
|
||||||
if (!Screen.hasShiftDown()
|
|
||||||
&& player.getVehicle() instanceof VehicleEntity vehicle
|
|
||||||
&& vehicle instanceof WeaponVehicleEntity weaponVehicle
|
|
||||||
&& weaponVehicle.hasWeapon(vehicle.getSeatIndex(player))
|
|
||||||
) {
|
|
||||||
int index = vehicle.getSeatIndex(player);
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new SwitchVehicleWeaponMessage(index, -scroll, true));
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.GUN) && ClientEventHandler.zoom) {
|
|
||||||
var tag = stack.getOrCreateTag();
|
|
||||||
if (GunsTool.getGunBooleanTag(stack, "CanSwitchScope", false)) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new SwitchScopeMessage(scroll));
|
|
||||||
} else if (tag.getBoolean("CanAdjustZoomFov") || stack.is(ModItems.MINIGUN.get())) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new AdjustZoomFovMessage(scroll));
|
|
||||||
}
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
|
||||||
ClientEventHandler.droneFov = Mth.clamp(ClientEventHandler.droneFov + 0.4 * scroll, 1, 6);
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity looking = TraceTool.findLookingEntity(player, 6);
|
|
||||||
if (looking == null) return;
|
|
||||||
if (looking instanceof MortarEntity && player.isShiftKeyDown()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new AdjustMortarAngleMessage(scroll));
|
|
||||||
event.setCanceled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void onKeyPressed(InputEvent.Key event) {
|
|
||||||
if (notInGame()) return;
|
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
if (player.isSpectator()) return;
|
|
||||||
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
|
|
||||||
setKeyState(event);
|
|
||||||
|
|
||||||
int key = event.getKey();
|
|
||||||
if (event.getAction() == GLFW.GLFW_PRESS) {
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == Minecraft.getInstance().options.keyJump.getKey().getValue()) {
|
|
||||||
handleDoubleJump(player);
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.CONFIG.getKey().getValue() && ModKeyMappings.CONFIG.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
|
|
||||||
handleConfigScreen(player);
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.RELOAD.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.FIRE_MODE.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new FireModeMessage(0));
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.INTERACT.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new InteractMessage(0));
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.DISMOUNT.getKey().getValue()) {
|
|
||||||
handleDismountPress(player);
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.EDIT_MODE.getKey().getValue() && ClientEventHandler.burstFireSize == 0) {
|
|
||||||
ClientEventHandler.holdFire = false;
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new EditModeMessage(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) {
|
|
||||||
if (!(stack.getItem() instanceof GunItem gunItem)) return;
|
|
||||||
if (ModKeyMappings.EDIT_GRIP.getKeyModifier().isActive(KeyConflictContext.IN_GAME)) {
|
|
||||||
if (key == ModKeyMappings.EDIT_GRIP.getKey().getValue() && gunItem.hasCustomGrip(stack)) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(4));
|
|
||||||
editModelShake();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (key == ModKeyMappings.EDIT_SCOPE.getKey().getValue() && gunItem.hasCustomScope(stack)) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(0));
|
|
||||||
editModelShake();
|
|
||||||
} else if (key == ModKeyMappings.EDIT_BARREL.getKey().getValue() && gunItem.hasCustomBarrel(stack)) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(1));
|
|
||||||
editModelShake();
|
|
||||||
} else if (key == ModKeyMappings.EDIT_MAGAZINE.getKey().getValue() && gunItem.hasCustomMagazine(stack)) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(2));
|
|
||||||
editModelShake();
|
|
||||||
} else if (key == ModKeyMappings.EDIT_STOCK.getKey().getValue() && gunItem.hasCustomStock(stack)) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(3));
|
|
||||||
editModelShake();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.SENSITIVITY_INCREASE.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new SensitivityMessage(true));
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.SENSITIVITY_REDUCE.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new SensitivityMessage(false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(ModTags.Items.GUN)
|
|
||||||
|| stack.is(ModItems.MONITOR.get())
|
|
||||||
|| (player.getVehicle() instanceof ArmedVehicleEntity iVehicle && iVehicle.isDriver(player))
|
|
||||||
|| (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get()))) {
|
|
||||||
if (key == ModKeyMappings.FIRE.getKey().getValue()) {
|
|
||||||
handleWeaponFirePress(player, stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == ModKeyMappings.HOLD_ZOOM.getKey().getValue()) {
|
|
||||||
handleWeaponZoomPress(player, stack);
|
|
||||||
switchZoom = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == ModKeyMappings.SWITCH_ZOOM.getKey().getValue()) {
|
|
||||||
handleWeaponZoomPress(player, stack);
|
|
||||||
switchZoom = !switchZoom;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == ModKeyMappings.FIRE.getKey().getValue()) {
|
|
||||||
handleWeaponFireRelease();
|
|
||||||
}
|
|
||||||
if (key == ModKeyMappings.HOLD_ZOOM.getKey().getValue()) {
|
|
||||||
handleWeaponZoomRelease();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key == ModKeyMappings.SWITCH_ZOOM.getKey().getValue() && !switchZoom) {
|
|
||||||
handleWeaponZoomRelease();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void handleWeaponFirePress(Player player, ItemStack stack) {
|
|
||||||
if (player.hasEffect(ModMobEffects.SHOCK.get())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new SetFiringParametersMessage(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(ModItems.MONITOR.get())) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (player.getVehicle() instanceof WeaponVehicleEntity iVehicle && iVehicle.banHand(player)) {
|
|
||||||
if (player.getVehicle() instanceof VehicleEntity pVehicle && iVehicle.hasWeapon(pVehicle.getSeatIndex(player))) {
|
|
||||||
ClientEventHandler.holdFireVehicle = true;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.is(ModItems.LUNGE_MINE.get())) {
|
|
||||||
ClientEventHandler.holdFire = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stack.getItem() instanceof GunItem gunItem && !(player.getVehicle() != null && player.getVehicle() instanceof CannonEntity)) {
|
|
||||||
if ((!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
|
|
||||||
&& !GunsTool.getGunBooleanTag(stack, "Reloading")
|
|
||||||
&& !GunsTool.getGunBooleanTag(stack, "Charging")
|
|
||||||
&& !GunsTool.getGunBooleanTag(stack, "NeedBoltAction", false))
|
|
||||||
&& cantFireTime == 0
|
|
||||||
&& drawTime < 0.01
|
|
||||||
&& !notInGame()) {
|
|
||||||
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gunItem.useBackpackAmmo(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) <= 0 && GunsTool.getGunIntTag(stack, "ReloadTime") == 0) {
|
|
||||||
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0));
|
|
||||||
if (!stack.is(ModItems.BOCEK.get())) {
|
|
||||||
ClientEventHandler.holdFire = true;
|
|
||||||
}
|
|
||||||
if (GunsTool.getGunIntTag(stack, "FireMode") == 1 && ClientEventHandler.burstFireSize == 0) {
|
|
||||||
ClientEventHandler.burstFireSize = GunsTool.getGunIntTag(stack, "BurstSize", 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void handleWeaponFireRelease() {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1));
|
|
||||||
ClientEventHandler.holdFire = false;
|
|
||||||
ClientEventHandler.holdFireVehicle = false;
|
|
||||||
ClientEventHandler.customRpm = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void handleWeaponZoomPress(Player player, ItemStack stack) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new ZoomMessage(0));
|
|
||||||
|
|
||||||
if (player.getVehicle() instanceof VehicleEntity pVehicle && player.getVehicle() instanceof WeaponVehicleEntity iVehicle && iVehicle.hasWeapon(pVehicle.getSeatIndex(player))) {
|
|
||||||
ClientEventHandler.zoomVehicle = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientEventHandler.zoom = true;
|
|
||||||
int level = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack);
|
|
||||||
if (level > 0) {
|
|
||||||
if (ClientEventHandler.entity == null) {
|
|
||||||
ClientEventHandler.entity = SeekTool.seekLivingEntity(player, player.level(), 32 + 8 * (level - 1), 20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void handleWeaponZoomRelease() {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new ZoomMessage(1));
|
|
||||||
ClientEventHandler.zoom = false;
|
|
||||||
ClientEventHandler.zoomVehicle = false;
|
|
||||||
ClientEventHandler.entity = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void editModelShake() {
|
|
||||||
ClientEventHandler.movePosY = -0.8;
|
|
||||||
ClientEventHandler.fireRotTimer = 0.4;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setKeyState(InputEvent.Key event) {
|
|
||||||
int key = event.getKey();
|
|
||||||
int state;
|
|
||||||
if (event.getAction() == InputConstants.PRESS) {
|
|
||||||
state = 1;
|
|
||||||
} else if (event.getAction() == InputConstants.RELEASE) {
|
|
||||||
state = 0;
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
handleVehicleMove(key, state, player);
|
|
||||||
handleDroneMove(key, state, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleDroneMove(int key, int state, Player player) {
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
|
||||||
var options = Minecraft.getInstance().options;
|
|
||||||
|
|
||||||
if (key == options.keyLeft.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(0, state == 1));
|
|
||||||
} else if (key == options.keyRight.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(1, state == 1));
|
|
||||||
} else if (key == options.keyUp.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(2, state == 1));
|
|
||||||
} else if (key == options.keyDown.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(3, state == 1));
|
|
||||||
} else if (key == options.keyJump.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(4, state == 1));
|
|
||||||
} else if (key == options.keyShift.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(5, state == 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleVehicleMove(int key, int state, Player player) {
|
|
||||||
if (player.getVehicle() instanceof MobileVehicleEntity mobileVehicle && mobileVehicle.getNthEntity(0) == player) {
|
|
||||||
var options = Minecraft.getInstance().options;
|
|
||||||
|
|
||||||
if (key == options.keyLeft.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(0, state == 1));
|
|
||||||
} else if (key == options.keyRight.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(1, state == 1));
|
|
||||||
} else if (key == options.keyUp.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(2, state == 1));
|
|
||||||
} else if (key == options.keyDown.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(3, state == 1));
|
|
||||||
} else if (key == options.keyJump.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(4, state == 1));
|
|
||||||
} else if (key == options.keyShift.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(5, state == 1));
|
|
||||||
} else if (key == ModKeyMappings.RELEASE_DECOY.getKey().getValue()) {
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(6, state == 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleDoubleJump(Player player) {
|
|
||||||
Level level = player.level();
|
|
||||||
double x = player.getX();
|
|
||||||
double y = player.getY();
|
|
||||||
double z = player.getZ();
|
|
||||||
|
|
||||||
if (!level.isLoaded(player.blockPosition())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).playerDoubleJump) {
|
|
||||||
player.setDeltaMovement(new Vec3(player.getLookAngle().x, 0.8, player.getLookAngle().z));
|
|
||||||
level.playLocalSound(x, y, z, ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1, false);
|
|
||||||
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new DoubleJumpMessage(false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleConfigScreen(Player player) {
|
|
||||||
if (ModList.get().isLoaded(CompatHolder.CLOTH_CONFIG)) {
|
|
||||||
CompatHolder.hasMod(CompatHolder.CLOTH_CONFIG, () -> Minecraft.getInstance().setScreen(ClothConfigHelper.getConfigScreen(null)));
|
|
||||||
} else {
|
|
||||||
player.displayClientMessage(Component.translatable("tips.superbwarfare.no_cloth_config").withStyle(ChatFormatting.RED), true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void handleDismountPress(Player player) {
|
|
||||||
var vehicle = player.getVehicle();
|
|
||||||
if (!(vehicle instanceof VehicleEntity)) return;
|
|
||||||
|
|
||||||
if ((!vehicle.onGround() || vehicle.getDeltaMovement().length() >= 0.1) && ClientEventHandler.dismountCountdown <= 0) {
|
|
||||||
player.displayClientMessage(Component.translatable("mount.onboard", ModKeyMappings.DISMOUNT.getTranslatedKeyMessage()), true);
|
|
||||||
ClientEventHandler.dismountCountdown = 20;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ModUtils.PACKET_HANDLER.sendToServer(new PlayerStopRidingMessage(0));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.block.ChargingStationBlockEntityRenderer;
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.block.ContainerBlockEntityRenderer;
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.block.FuMO25BlockEntityRenderer;
|
|
||||||
import com.atsuishio.superbwarfare.client.tooltip.*;
|
|
||||||
import com.atsuishio.superbwarfare.client.tooltip.component.*;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModBlockEntities;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.client.event.EntityRenderersEvent;
|
|
||||||
import net.minecraftforge.client.event.RegisterClientTooltipComponentFactoriesEvent;
|
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
|
||||||
public class ClientRenderHandler {
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void registerTooltip(RegisterClientTooltipComponentFactoriesEvent event) {
|
|
||||||
event.register(GunImageComponent.class, ClientGunImageTooltip::new);
|
|
||||||
event.register(ShotgunImageComponent.class, ClientShotgunImageTooltip::new);
|
|
||||||
event.register(BocekImageComponent.class, ClientBocekImageTooltip::new);
|
|
||||||
event.register(EnergyImageComponent.class, ClientEnergyImageTooltip::new);
|
|
||||||
event.register(CellImageComponent.class, ClientCellImageTooltip::new);
|
|
||||||
event.register(SentinelImageComponent.class, ClientSentinelImageTooltip::new);
|
|
||||||
event.register(LauncherImageComponent.class, ClientLauncherImageTooltip::new);
|
|
||||||
event.register(SecondaryCataclysmImageComponent.class, ClientSecondaryCataclysmImageTooltip::new);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
|
|
||||||
event.registerBlockEntityRenderer(ModBlockEntities.CONTAINER.get(), context -> new ContainerBlockEntityRenderer());
|
|
||||||
event.registerBlockEntityRenderer(ModBlockEntities.FUMO_25.get(), context -> new FuMO25BlockEntityRenderer());
|
|
||||||
event.registerBlockEntityRenderer(ModBlockEntities.CHARGING_STATION.get(), context -> new ChargingStationBlockEntityRenderer());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import software.bernie.geckolib.cache.object.GeoBone;
|
|
||||||
|
|
||||||
public class ItemModelHelper {
|
|
||||||
|
|
||||||
public static void handleGunAttachments(GeoBone bone, ItemStack stack, String name) {
|
|
||||||
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
|
|
||||||
|
|
||||||
splitBoneName(bone, name, "Scope", tag);
|
|
||||||
splitBoneName(bone, name, "Magazine", tag);
|
|
||||||
splitBoneName(bone, name, "Barrel", tag);
|
|
||||||
splitBoneName(bone, name, "Stock", tag);
|
|
||||||
splitBoneName(bone, name, "Grip", tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void splitBoneName(GeoBone bone, String boneName, String tagName, CompoundTag tag) {
|
|
||||||
try {
|
|
||||||
if (boneName.startsWith(tagName)) {
|
|
||||||
String[] parts = boneName.split("(?<=\\D)(?=\\d)");
|
|
||||||
if (parts.length == 2) {
|
|
||||||
int index = Integer.parseInt(parts[1]);
|
|
||||||
bone.setHidden(tag.getInt(tagName) != index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexFormat;
|
|
||||||
import net.minecraft.Util;
|
|
||||||
import net.minecraft.client.renderer.RenderStateShard;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class ModRenderTypes extends RenderType {
|
|
||||||
|
|
||||||
public ModRenderTypes(String pName, VertexFormat pFormat, VertexFormat.Mode pMode, int pBufferSize, boolean pAffectsCrumbling, boolean pSortOnUpload, Runnable pSetupState, Runnable pClearState) {
|
|
||||||
super(pName, pFormat, pMode, pBufferSize, pAffectsCrumbling, pSortOnUpload, pSetupState, pClearState);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final Function<ResourceLocation, RenderType> LASER = Util.memoize((location) -> {
|
|
||||||
TextureStateShard shard = new RenderStateShard.TextureStateShard(location, false, false);
|
|
||||||
RenderType.CompositeState state = RenderType.CompositeState.builder().setTextureState(shard)
|
|
||||||
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_EMISSIVE_SHADER).setTransparencyState(ADDITIVE_TRANSPARENCY)
|
|
||||||
.setCullState(NO_CULL).setOverlayState(OVERLAY).setWriteMaskState(COLOR_WRITE).createCompositeState(false);
|
|
||||||
return RenderType.create("laser", DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, false, state);
|
|
||||||
});
|
|
||||||
|
|
||||||
public static final Function<ResourceLocation, RenderType> ILLUMINATED = Util.memoize((location) -> {
|
|
||||||
TextureStateShard shard = new RenderStateShard.TextureStateShard(location, false, false);
|
|
||||||
RenderType.CompositeState state = RenderType.CompositeState.builder().setTextureState(shard)
|
|
||||||
.setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_EMISSIVE_SHADER).setTransparencyState(RenderStateShard.GLINT_TRANSPARENCY)
|
|
||||||
.setCullState(NO_CULL).setOverlayState(NO_OVERLAY).setWriteMaskState(COLOR_WRITE).createCompositeState(false);
|
|
||||||
return RenderType.create("illuminated", DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, false, state);
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.MouseHandler;
|
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
|
||||||
import net.minecraft.world.phys.Vec2;
|
|
||||||
import org.joml.Vector3f;
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codes from @getItemFromBlock's Create-Tweaked-Controllers
|
|
||||||
*/
|
|
||||||
public class MouseMovementHandler {
|
|
||||||
|
|
||||||
public static Vec2 delta = null;
|
|
||||||
public static Vec2 lastPos = null;
|
|
||||||
public static Vec2 vel = null;
|
|
||||||
private static MouseHandler mouseHandler = null;
|
|
||||||
private static boolean mouseLockActive = false;
|
|
||||||
private static Vector3f savedRot = new Vector3f();
|
|
||||||
|
|
||||||
public static Vec2 getMousePos() {
|
|
||||||
if (mouseHandler.isMouseGrabbed()) {
|
|
||||||
return new Vec2((float) mouseHandler.xpos(), (float) mouseHandler.ypos());
|
|
||||||
} else {
|
|
||||||
double[] x, y;
|
|
||||||
x = new double[1];
|
|
||||||
y = new double[1];
|
|
||||||
GLFW.glfwGetCursorPos(Minecraft.getInstance().getWindow().getWindow(), x, y);
|
|
||||||
return new Vec2((float) x[0], (float) y[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void resetCenter() {
|
|
||||||
delta = new Vec2(0, 0);
|
|
||||||
vel = new Vec2(0, 0);
|
|
||||||
lastPos = getMousePos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void init() {
|
|
||||||
delta = new Vec2(0, 0);
|
|
||||||
vel = new Vec2(0, 0);
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
|
||||||
mouseHandler = mc.mouseHandler;
|
|
||||||
lastPos = getMousePos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float getX(boolean useVelocity) {
|
|
||||||
if (useVelocity) {
|
|
||||||
return vel.x;
|
|
||||||
} else {
|
|
||||||
return delta.x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float getY(boolean useVelocity) {
|
|
||||||
if (useVelocity) {
|
|
||||||
return vel.y;
|
|
||||||
} else {
|
|
||||||
return delta.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void activateMouseLock() {
|
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
|
|
||||||
savedRot.x = player.getXRot();
|
|
||||||
savedRot.y = player.getYRot();
|
|
||||||
savedRot.z = 0;
|
|
||||||
mouseLockActive = true;
|
|
||||||
lastPos = getMousePos();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void deactivateMouseLock() {
|
|
||||||
mouseLockActive = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void cancelPlayerTurn() {
|
|
||||||
if (!mouseLockActive) return;
|
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
player.turn((savedRot.y - player.getYRot()) / 0.15f, (savedRot.x - player.getXRot()) / 0.15f);
|
|
||||||
player.xBob = savedRot.x;
|
|
||||||
player.yBob = savedRot.y;
|
|
||||||
player.xBobO = savedRot.x;
|
|
||||||
player.yBobO = savedRot.y;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
|
||||||
import net.minecraft.client.model.HumanoidModel;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
|
||||||
public class PoseTool {
|
|
||||||
|
|
||||||
public static HumanoidModel.ArmPose pose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
|
|
||||||
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")
|
|
||||||
|| stack.getOrCreateTag().getBoolean("is_normal_reloading")
|
|
||||||
|| GunsTool.getGunBooleanTag(stack, "Reloading")
|
|
||||||
|| GunsTool.getGunBooleanTag(stack, "Charging")) {
|
|
||||||
return HumanoidModel.ArmPose.CROSSBOW_CHARGE;
|
|
||||||
} else if (entityLiving.isSprinting() && entityLiving.onGround() && entityLiving.getPersistentData().getDouble("noRun") == 0) {
|
|
||||||
return HumanoidModel.ArmPose.CROSSBOW_CHARGE;
|
|
||||||
} else {
|
|
||||||
return HumanoidModel.ArmPose.BOW_AND_ARROW;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,139 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import com.mojang.blaze3d.vertex.*;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
|
||||||
import net.minecraft.client.renderer.culling.Frustum;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
import org.joml.Matrix4f;
|
|
||||||
import org.joml.Vector3f;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
public class RenderHelper {
|
|
||||||
|
|
||||||
public static void preciseBlit(GuiGraphics gui, ResourceLocation pAtlasLocation, float pX, float pY, float pUOffset, float pVOffset, float pWidth, float pHeight, float pTextureWidth, float pTextureHeight) {
|
|
||||||
preciseBlit(gui, pAtlasLocation, pX, pY, 0, pUOffset, pVOffset, pWidth, pHeight, pTextureWidth, pTextureHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void preciseBlit(GuiGraphics gui, ResourceLocation pAtlasLocation, float pX, float pY, float pBlitOffset, float pUOffset, float pVOffset, float pWidth, float pHeight, float pTextureWidth, float pTextureHeight) {
|
|
||||||
float pX2 = pX + pWidth;
|
|
||||||
float pY2 = pY + pHeight;
|
|
||||||
|
|
||||||
float pMinU = pUOffset / pTextureWidth;
|
|
||||||
float pMaxU = (pUOffset + pWidth) / pTextureWidth;
|
|
||||||
float pMinV = pVOffset / pTextureHeight;
|
|
||||||
float pMaxV = (pVOffset + pHeight) / pTextureHeight;
|
|
||||||
|
|
||||||
RenderSystem.setShaderTexture(0, pAtlasLocation);
|
|
||||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
|
||||||
Matrix4f matrix4f = gui.pose().last().pose();
|
|
||||||
BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder();
|
|
||||||
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
|
|
||||||
bufferbuilder.vertex(matrix4f, pX, pY, pBlitOffset).uv(pMinU, pMinV).endVertex();
|
|
||||||
bufferbuilder.vertex(matrix4f, pX, pY2, pBlitOffset).uv(pMinU, pMaxV).endVertex();
|
|
||||||
bufferbuilder.vertex(matrix4f, pX2, pY2, pBlitOffset).uv(pMaxU, pMaxV).endVertex();
|
|
||||||
bufferbuilder.vertex(matrix4f, pX2, pY, pBlitOffset).uv(pMaxU, pMinV).endVertex();
|
|
||||||
BufferUploader.drawWithShader(bufferbuilder.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Codes based on @Xjqsh
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
public static Vec3 worldToScreen(Vec3 pos, Vec3 cameraPos) {
|
|
||||||
Minecraft minecraft = Minecraft.getInstance();
|
|
||||||
Frustum frustum = minecraft.levelRenderer.getFrustum();
|
|
||||||
|
|
||||||
Vector3f relativePos = pos.subtract(cameraPos).toVector3f();
|
|
||||||
Vector3f transformedPos = frustum.matrix.transformProject(relativePos.x, relativePos.y, relativePos.z, new Vector3f());
|
|
||||||
|
|
||||||
double scaleFactor = minecraft.getWindow().getGuiScale();
|
|
||||||
float guiScaleMul = 0.5f / (float) scaleFactor;
|
|
||||||
|
|
||||||
Vector3f screenPos = transformedPos.mul(1.0f, -1.0f, 1.0f).add(1.0f, 1.0f, 0.0f)
|
|
||||||
.mul(guiScaleMul * minecraft.getWindow().getWidth(), guiScaleMul * minecraft.getWindow().getHeight(), 1.0f);
|
|
||||||
|
|
||||||
return transformedPos.z < 1.0f ? new Vec3(screenPos.x, screenPos.y, transformedPos.z) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX, float pY, float pUOffset, float pVOffset, float pWidth, float pHeight, float pTextureWidth, float pTextureHeight, int color) {
|
|
||||||
blit(pose, pAtlasLocation, pX, pY, pWidth, pHeight, pUOffset, pVOffset, pWidth, pHeight, pTextureWidth, pTextureHeight, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX, float pY, float pWidth, float pHeight, float pUOffset, float pVOffset, float pUWidth, float pVHeight, float pTextureWidth, float pTextureHeight, int color) {
|
|
||||||
blit(pose, pAtlasLocation, pX, pX + pWidth, pY, pY + pHeight, 0, pUWidth, pVHeight, pUOffset, pVOffset, pTextureWidth, pTextureHeight, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX1, float pX2, float pY1, float pY2, float pBlitOffset, float pUWidth, float pVHeight, float pUOffset, float pVOffset, float pTextureWidth, float pTextureHeight, int color) {
|
|
||||||
innerBlit(pose, pAtlasLocation, pX1, pX2, pY1, pY2, pBlitOffset, (pUOffset + 0.0F) / pTextureWidth, (pUOffset + pUWidth) / pTextureWidth, (pVOffset + 0.0F) / pTextureHeight, (pVOffset + pVHeight) / pTextureHeight, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX, float pY, float pUOffset, float pVOffset, float pWidth, float pHeight, float pTextureWidth, float pTextureHeight, float alpha, boolean opposite) {
|
|
||||||
blit(pose, pAtlasLocation, pX, pY, pWidth, pHeight, pUOffset, pVOffset, pWidth, pHeight, pTextureWidth, pTextureHeight, alpha, opposite);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX, float pY, float pUOffset, float pVOffset, float pWidth, float pHeight, float pTextureWidth, float pTextureHeight, float alpha) {
|
|
||||||
blit(pose, pAtlasLocation, pX, pY, pUOffset, pVOffset, pWidth, pHeight, pTextureWidth, pTextureHeight, alpha, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX, float pY, float pWidth, float pHeight, float pUOffset, float pVOffset, float pUWidth, float pVHeight, float pTextureWidth, float pTextureHeight, float alpha, boolean opposite) {
|
|
||||||
blit(pose, pAtlasLocation, pX, pX + pWidth, pY, pY + pHeight, 0, pUWidth, pVHeight, pUOffset, pVOffset, pTextureWidth, pTextureHeight, alpha, opposite);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void blit(PoseStack pose, ResourceLocation pAtlasLocation, float pX1, float pX2, float pY1, float pY2, float pBlitOffset, float pUWidth, float pVHeight, float pUOffset, float pVOffset, float pTextureWidth, float pTextureHeight, float alpha, boolean opposite) {
|
|
||||||
innerBlit(pose, pAtlasLocation, pX1, pX2, pY1, pY2, pBlitOffset, (pUOffset + 0.0F) / pTextureWidth, (pUOffset + pUWidth) / pTextureWidth, (pVOffset + 0.0F) / pTextureHeight, (pVOffset + pVHeight) / pTextureHeight, alpha, opposite);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void innerBlit(PoseStack pose, ResourceLocation pAtlasLocation, float pX1, float pX2, float pY1, float pY2, float pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV, int color) {
|
|
||||||
RenderSystem.setShaderTexture(0, pAtlasLocation);
|
|
||||||
RenderSystem.setShader(GameRenderer::getPositionColorTexShader);
|
|
||||||
|
|
||||||
Matrix4f matrix4f = pose.last().pose();
|
|
||||||
BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder();
|
|
||||||
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX);
|
|
||||||
|
|
||||||
vertexC(pX1, pX2, pY1, pY2, pBlitOffset, pMinU, pMaxU, pMinV, pMaxV, color, matrix4f, bufferbuilder);
|
|
||||||
|
|
||||||
BufferUploader.drawWithShader(bufferbuilder.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void innerBlit(PoseStack pose, ResourceLocation pAtlasLocation, float pX1, float pX2, float pY1, float pY2, float pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV, float alpha, boolean opposite) {
|
|
||||||
RenderSystem.setShaderTexture(0, pAtlasLocation);
|
|
||||||
RenderSystem.setShader(GameRenderer::getPositionColorTexShader);
|
|
||||||
RenderSystem.enableBlend();
|
|
||||||
Matrix4f matrix4f = pose.last().pose();
|
|
||||||
BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder();
|
|
||||||
bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX);
|
|
||||||
|
|
||||||
if (opposite) {
|
|
||||||
vertex(pX1, pX2, pY1, pY2, pBlitOffset, pMaxU, pMinU, pMinV, pMaxV, alpha, matrix4f, bufferbuilder);
|
|
||||||
} else {
|
|
||||||
vertex(pX1, pX2, pY1, pY2, pBlitOffset, pMinU, pMaxU, pMinV, pMaxV, alpha, matrix4f, bufferbuilder);
|
|
||||||
}
|
|
||||||
|
|
||||||
BufferUploader.drawWithShader(bufferbuilder.end());
|
|
||||||
RenderSystem.disableBlend();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void vertex(float pX1, float pX2, float pY1, float pY2, float pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV, float alpha, Matrix4f matrix4f, BufferBuilder bufferBuilder) {
|
|
||||||
bufferBuilder.vertex(matrix4f, pX1, pY1, pBlitOffset).color(1f, 1f, 1f, alpha).uv(pMinU, pMinV).endVertex();
|
|
||||||
bufferBuilder.vertex(matrix4f, pX1, pY2, pBlitOffset).color(1f, 1f, 1f, alpha).uv(pMinU, pMaxV).endVertex();
|
|
||||||
bufferBuilder.vertex(matrix4f, pX2, pY2, pBlitOffset).color(1f, 1f, 1f, alpha).uv(pMaxU, pMaxV).endVertex();
|
|
||||||
bufferBuilder.vertex(matrix4f, pX2, pY1, pBlitOffset).color(1f, 1f, 1f, alpha).uv(pMaxU, pMinV).endVertex();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void vertexC(float pX1, float pX2, float pY1, float pY2, float pBlitOffset, float pMinU, float pMaxU, float pMinV, float pMaxV, int color, Matrix4f matrix4f, BufferBuilder bufferBuilder) {
|
|
||||||
float r = (color >> 16 & 255) / 255.0F;
|
|
||||||
float g = (color >> 8 & 255) / 255.0F;
|
|
||||||
float b = (color & 255) / 255.0F;
|
|
||||||
|
|
||||||
bufferBuilder.vertex(matrix4f, pX1, pY1, pBlitOffset).color(r, g, b, 1f).uv(pMinU, pMinV).endVertex();
|
|
||||||
bufferBuilder.vertex(matrix4f, pX1, pY2, pBlitOffset).color(r, g, b, 1f).uv(pMinU, pMaxV).endVertex();
|
|
||||||
bufferBuilder.vertex(matrix4f, pX2, pY2, pBlitOffset).color(r, g, b, 1f).uv(pMaxU, pMaxV).endVertex();
|
|
||||||
bufferBuilder.vertex(matrix4f, pX2, pY1, pBlitOffset).color(r, g, b, 1f).uv(pMaxU, pMinV).endVertex();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
|
||||||
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
|
||||||
import net.minecraft.ChatFormatting;
|
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
|
||||||
import net.minecraft.network.chat.Component;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class TooltipTool {
|
|
||||||
|
|
||||||
public static void addHideText(List<Component> tooltip, Component text) {
|
|
||||||
if (Screen.hasShiftDown()) {
|
|
||||||
tooltip.add(text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void addDevelopingText(List<Component> tooltip) {
|
|
||||||
tooltip.add(Component.translatable("des.superbwarfare.developing").withStyle(ChatFormatting.LIGHT_PURPLE).withStyle(ChatFormatting.BOLD));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double perkDamage(ItemStack stack) {
|
|
||||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
|
||||||
if (perk instanceof AmmoPerk ammoPerk) {
|
|
||||||
return ammoPerk.damageRate;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean heBullet(ItemStack stack) {
|
|
||||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
|
||||||
return perk == ModPerks.HE_BULLET.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int heBulletLevel(ItemStack stack) {
|
|
||||||
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
|
|
||||||
if (perk == ModPerks.HE_BULLET.get()) {
|
|
||||||
return PerkHelper.getItemPerkLevel(perk, stack);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,149 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.gui;
|
|
||||||
|
|
||||||
import net.minecraft.world.phys.Vec3;
|
|
||||||
|
|
||||||
public class RangeHelper {
|
|
||||||
|
|
||||||
public static final int MAX_RANGE = 1145;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 计算迫击炮理论水平射程
|
|
||||||
*
|
|
||||||
* @param thetaDegrees 发射角度(以度为单位),需要根据实际情况修改
|
|
||||||
*/
|
|
||||||
public static double getRange(double thetaDegrees) {
|
|
||||||
double initialVelocity = 11.4; // 初始速度 11.4 m/s
|
|
||||||
double thetaRadians = Math.toRadians(thetaDegrees); // 将角度转换为弧度
|
|
||||||
double gravity = 0.146; // 重力加速度
|
|
||||||
double velocityDecay = 0.99; // 速度衰减系数
|
|
||||||
|
|
||||||
// 计算射程
|
|
||||||
return calculateRange(initialVelocity, thetaRadians, gravity, velocityDecay);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double calculateRange(double initialVelocity, double theta, double gravity, double velocityDecay) {
|
|
||||||
double vx = initialVelocity * Math.cos(theta); // 水平速度
|
|
||||||
double vy = initialVelocity * Math.sin(theta); // 垂直速度
|
|
||||||
|
|
||||||
double x = 0.0; // 水平位置
|
|
||||||
double y = 1.0; // 垂直位置
|
|
||||||
|
|
||||||
// 当炮弹还未触地时,继续计算飞行轨迹
|
|
||||||
while (y >= 0) {
|
|
||||||
// 更新位置
|
|
||||||
x += vx;
|
|
||||||
y += vy;
|
|
||||||
|
|
||||||
// 更新速度
|
|
||||||
vx *= velocityDecay;
|
|
||||||
vy = vy * velocityDecay - gravity;
|
|
||||||
|
|
||||||
// 如果炮弹触地,则跳出循环
|
|
||||||
if (y < 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 返回最终水平距离
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double calculateRangeWithDeltaY(double initialVelocity, double theta, double gravity, double velocityDecay, double deltaY) {
|
|
||||||
double vx = initialVelocity * Math.cos(theta); // 水平速度
|
|
||||||
double vy = initialVelocity * Math.sin(theta); // 垂直速度
|
|
||||||
|
|
||||||
double range = 0.0; // 水平距离
|
|
||||||
double y = 1.0; // 垂直位置
|
|
||||||
|
|
||||||
double commonRange = calculateRange(initialVelocity, theta, gravity, velocityDecay);
|
|
||||||
|
|
||||||
// 当炮弹还未触地时,继续计算飞行轨迹
|
|
||||||
while (range < commonRange / 2 || (range >= commonRange / 2 && y >= deltaY)) {
|
|
||||||
// 更新位置
|
|
||||||
range += vx;
|
|
||||||
y += vy;
|
|
||||||
|
|
||||||
// 更新速度
|
|
||||||
vx *= velocityDecay;
|
|
||||||
vy = vy * velocityDecay - gravity;
|
|
||||||
|
|
||||||
if (range >= commonRange / 2 && y < deltaY) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 返回最终水平距离
|
|
||||||
return range;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean canReachTarget(double initialVelocity, double gravity, double velocityDecay, Vec3 startPos, Vec3 targetPos, double[] angles) {
|
|
||||||
if (startPos.equals(targetPos)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
double startX = startPos.x;
|
|
||||||
double startY = startPos.y;
|
|
||||||
double startZ = startPos.z;
|
|
||||||
|
|
||||||
double targetX = targetPos.x;
|
|
||||||
double targetY = targetPos.y;
|
|
||||||
double targetZ = targetPos.z;
|
|
||||||
|
|
||||||
double distanceXZ = Math.sqrt(Math.pow(targetX - startX, 2) + Math.pow(targetZ - startZ, 2));
|
|
||||||
if (distanceXZ > MAX_RANGE) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
double theta = calculateLaunchAngle(initialVelocity, gravity, velocityDecay, distanceXZ, targetY - startY);
|
|
||||||
|
|
||||||
if (theta < 20 || theta > 90) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
angles[0] = Math.atan2(targetZ, targetX); // 水平角度
|
|
||||||
angles[1] = theta; // 炮口抬升角度
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static double calculateLaunchAngle(double initialVelocity, double gravity, double velocityDecay, double distanceXZ, double targetY) {
|
|
||||||
double left = 20; // 最小角度
|
|
||||||
double right = 30; // 最大角度
|
|
||||||
double tolerance = 0.5; // 允许的误差范围
|
|
||||||
|
|
||||||
// 在 20 到 30 之间搜索
|
|
||||||
while (right - left > tolerance) {
|
|
||||||
double mid = (left + right) / 2;
|
|
||||||
double radian = Math.toRadians(mid);
|
|
||||||
double range = calculateRangeWithDeltaY(initialVelocity, radian, gravity, velocityDecay, targetY);
|
|
||||||
|
|
||||||
if (Math.abs(range - distanceXZ) < tolerance * 8) {
|
|
||||||
return mid;
|
|
||||||
} else if (range < distanceXZ) {
|
|
||||||
left = mid;
|
|
||||||
} else {
|
|
||||||
right = mid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果在 20 到 30 之间没有找到合适的角度,则在 30 到 90 之间搜索
|
|
||||||
left = 30;
|
|
||||||
right = 90;
|
|
||||||
|
|
||||||
while (right - left > tolerance) {
|
|
||||||
double mid = (left + right) / 2;
|
|
||||||
double radian = Math.toRadians(mid);
|
|
||||||
double range = calculateRangeWithDeltaY(initialVelocity, radian, gravity, velocityDecay, targetY);
|
|
||||||
|
|
||||||
if (Math.abs(range - distanceXZ) < tolerance * 8) {
|
|
||||||
return mid;
|
|
||||||
} else if (range < distanceXZ) {
|
|
||||||
right = mid;
|
|
||||||
} else {
|
|
||||||
left = mid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果仍然没有找到合适的角度,则返回 -1
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.AK12Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AK12Layer extends GeoRenderLayer<AK12Item> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/item/ak12_e.png");
|
|
||||||
|
|
||||||
public AK12Layer(GeoRenderer<AK12Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AK12Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.AK47Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AK47Layer extends GeoRenderLayer<AK47Item> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/item/ak47_e.png");
|
|
||||||
|
|
||||||
public AK47Layer(GeoRenderer<AK47Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AK47Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.shotgun.Aa12Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Aa12Layer extends GeoRenderLayer<Aa12Item> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/item/aa12_e.png");
|
|
||||||
|
|
||||||
public Aa12Layer(GeoRenderer<Aa12Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Aa12Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.AnnihilatorEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AnnihilatorGlowLayer extends GeoRenderLayer<AnnihilatorEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_glow_e.png");
|
|
||||||
|
|
||||||
public AnnihilatorGlowLayer(GeoRenderer<AnnihilatorEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.LASER.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.AnnihilatorEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AnnihilatorLayer extends GeoRenderLayer<AnnihilatorEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_e.png");
|
|
||||||
|
|
||||||
public AnnihilatorLayer(GeoRenderer<AnnihilatorEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.energySwirl(LAYER, 1, 1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.AnnihilatorEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AnnihilatorLedLayer extends GeoRenderLayer<AnnihilatorEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_led.png");
|
|
||||||
|
|
||||||
public AnnihilatorLedLayer(GeoRenderer<AnnihilatorEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.entityTranslucent(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.AnnihilatorEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AnnihilatorLedLightLayer extends GeoRenderLayer<AnnihilatorEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_led.png");
|
|
||||||
|
|
||||||
public AnnihilatorLedLightLayer(GeoRenderer<AnnihilatorEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.AnnihilatorEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AnnihilatorPowerLayer extends GeoRenderLayer<AnnihilatorEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_power.png");
|
|
||||||
|
|
||||||
public AnnihilatorPowerLayer(GeoRenderer<AnnihilatorEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.entityTranslucent(LAYER);
|
|
||||||
float red = 1 - Mth.clamp(2.5f * animatable.getEnergy()/ animatable.getMaxEnergy(),0,1);
|
|
||||||
float green = Mth.clamp(2.5f * animatable.getEnergy()/ animatable.getMaxEnergy(),0,1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, red, green, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.AnnihilatorEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class AnnihilatorPowerLightLayer extends GeoRenderLayer<AnnihilatorEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/annihilator_power.png");
|
|
||||||
|
|
||||||
public AnnihilatorPowerLightLayer(GeoRenderer<AnnihilatorEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, AnnihilatorEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
float red = 1 - Mth.clamp(2.5f * animatable.getEnergy()/ animatable.getMaxEnergy(),0,1);
|
|
||||||
float green = Mth.clamp(2.5f * animatable.getEnergy()/ animatable.getMaxEnergy(),0,1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, red, green, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Bmp2Entity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Bmp2Layer extends GeoRenderLayer<Bmp2Entity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/speedboat_e.png");
|
|
||||||
|
|
||||||
public Bmp2Layer(GeoRenderer<Bmp2Entity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Bmp2Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.energySwirl(LAYER,1,1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.special.BocekItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class BocekLayer extends GeoRenderLayer<BocekItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/bocek_e.png");
|
|
||||||
|
|
||||||
public BocekLayer(GeoRenderer<BocekItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, BocekItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.CannonShellEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class CannonShellLayer extends GeoRenderLayer<CannonShellEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/cannon_shell_e.png");
|
|
||||||
|
|
||||||
public CannonShellLayer(GeoRenderer<CannonShellEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, CannonShellEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.DevotionItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class DevotionLayer extends GeoRenderLayer<DevotionItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/devotion_e.png");
|
|
||||||
|
|
||||||
public DevotionLayer(GeoRenderer<DevotionItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, DevotionItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Glock17Layer extends GeoRenderLayer<Glock17Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/glock17_e.png");
|
|
||||||
|
|
||||||
public Glock17Layer(GeoRenderer<Glock17Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Glock17Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Glock17LightLayer extends GeoRenderLayer<Glock17Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/glock17_e.png");
|
|
||||||
|
|
||||||
public Glock17LightLayer(GeoRenderer<Glock17Item> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Glock17Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock18Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Glock18Layer extends GeoRenderLayer<Glock18Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/glock17_e.png");
|
|
||||||
|
|
||||||
public Glock18Layer(GeoRenderer<Glock18Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Glock18Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Glock18Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Glock18LightLayer extends GeoRenderLayer<Glock18Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/glock17_e.png");
|
|
||||||
|
|
||||||
public Glock18LightLayer(GeoRenderer<Glock18Item> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Glock18Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.GunGrenadeEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class GunGrenadeLayer extends GeoRenderLayer<GunGrenadeEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/cannon_shell_e.png");
|
|
||||||
|
|
||||||
public GunGrenadeLayer(GeoRenderer<GunGrenadeEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, GunGrenadeEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.HeliRocketEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class HeliRocketLayer extends GeoRenderLayer<HeliRocketEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/rpg_rocket_e.png");
|
|
||||||
|
|
||||||
public HeliRocketLayer(GeoRenderer<HeliRocketEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, HeliRocketEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Hk416Layer extends GeoRenderLayer<Hk416Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/hk416_e.png");
|
|
||||||
|
|
||||||
public Hk416Layer(GeoRenderer<Hk416Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Hk416Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.shotgun.HomemadeShotgunItem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class HomemadeShotgunLayer extends GeoRenderLayer<HomemadeShotgunItem> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/item/homemade_shotgun_e.png");
|
|
||||||
|
|
||||||
public HomemadeShotgunLayer(GeoRenderer<HomemadeShotgunItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, HomemadeShotgunItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.HuntingRifleItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class HuntingRifleLayer extends GeoRenderLayer<HuntingRifleItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/hunting_rifle_e.png");
|
|
||||||
|
|
||||||
public HuntingRifleLayer(GeoRenderer<HuntingRifleItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, HuntingRifleItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.JavelinMissileEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class JavelinMissleLayer extends GeoRenderLayer<JavelinMissileEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/rpg_rocket_e.png");
|
|
||||||
|
|
||||||
public JavelinMissleLayer(GeoRenderer<JavelinMissileEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, JavelinMissileEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.K98Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class K98Layer extends GeoRenderLayer<K98Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/k98_e.png");
|
|
||||||
|
|
||||||
public K98Layer(GeoRenderer<K98Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, K98Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.LaserTowerEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class LaserTowerLaserLayer extends GeoRenderLayer<LaserTowerEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/laser_tower_laser.png");
|
|
||||||
|
|
||||||
public LaserTowerLaserLayer(GeoRenderer<LaserTowerEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, LaserTowerEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.energySwirl(LAYER, 1, 1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.LaserTowerEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.entity.vehicle.LaserTowerEntity.ACTIVE;
|
|
||||||
|
|
||||||
public class LaserTowerPowerLayer extends GeoRenderLayer<LaserTowerEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/laser_tower_e.png");
|
|
||||||
|
|
||||||
public LaserTowerPowerLayer(GeoRenderer<LaserTowerEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, LaserTowerEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
if (animatable.getEnergy() <= 0 || !animatable.getEntityData().get(ACTIVE)) return;
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Lav150Layer extends GeoRenderLayer<Lav150Entity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/speedboat_e.png");
|
|
||||||
|
|
||||||
public Lav150Layer(GeoRenderer<Lav150Entity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Lav150Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.energySwirl(LAYER,1,1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.M1911Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class M1911Layer extends GeoRenderLayer<M1911Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/m1911_e.png");
|
|
||||||
|
|
||||||
public M1911Layer(GeoRenderer<M1911Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, M1911Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.M4Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class M4Layer extends GeoRenderLayer<M4Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/m4_e.png");
|
|
||||||
|
|
||||||
public M4Layer(GeoRenderer<M4Item> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, M4Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class M60Layer extends GeoRenderLayer<M60Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/m60_e.png");
|
|
||||||
|
|
||||||
public M60Layer(GeoRenderer<M60Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, M60Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.launcher.M79Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class M79Layer extends GeoRenderLayer<M79Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/m79_e.png");
|
|
||||||
|
|
||||||
public M79Layer(GeoRenderer<M79Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, M79Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.shotgun.M870Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class M870Layer extends GeoRenderLayer<M870Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/m870_e.png");
|
|
||||||
|
|
||||||
public M870Layer(GeoRenderer<M870Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, M870Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.M98bItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class M98bLayer extends GeoRenderLayer<M98bItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/m98b_e.png");
|
|
||||||
|
|
||||||
public M98bLayer(GeoRenderer<M98bItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, M98bItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.MarlinItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class MarlinLayer extends GeoRenderLayer<MarlinItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/marlin_e.png");
|
|
||||||
|
|
||||||
public MarlinLayer(GeoRenderer<MarlinItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, MarlinItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.init.ModTags;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.MinigunItem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class MinigunHeatLayer extends GeoRenderLayer<MinigunItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/minigun_heat_e.png");
|
|
||||||
|
|
||||||
public MinigunHeatLayer(GeoRenderer<MinigunItem> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, MinigunItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
Player player = Minecraft.getInstance().player;
|
|
||||||
if (player == null) return;
|
|
||||||
ItemStack stack = player.getMainHandItem();
|
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
|
||||||
float heat = (float) stack.getOrCreateTag().getDouble("heat");
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, heat / 55, heat / 55, heat / 55, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.MinigunItem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class MinigunLayer extends GeoRenderLayer<MinigunItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/minigun_e.png");
|
|
||||||
|
|
||||||
public MinigunLayer(GeoRenderer<MinigunItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, MinigunItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.Mk14Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Mk14Layer extends GeoRenderLayer<Mk14Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/mk14_e.png");
|
|
||||||
|
|
||||||
public Mk14Layer(GeoRenderer<Mk14Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Mk14Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mk42Entity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Mk42Layer extends GeoRenderLayer<Mk42Entity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/sherman_e.png");
|
|
||||||
|
|
||||||
public Mk42Layer(GeoRenderer<Mk42Entity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Mk42Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.Mle1934Entity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Mle1934Layer extends GeoRenderLayer<Mle1934Entity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/sherman_e.png");
|
|
||||||
|
|
||||||
public Mle1934Layer(GeoRenderer<Mle1934Entity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Mle1934Entity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.MortarEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class MortarLayer extends GeoRenderLayer<MortarEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/mortar_e.png");
|
|
||||||
|
|
||||||
public MortarLayer(GeoRenderer<MortarEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, MortarEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.MosinNagantItem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class MosinNagantLayer extends GeoRenderLayer<MosinNagantItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/mosin_nagant_e.png");
|
|
||||||
|
|
||||||
public MosinNagantLayer(GeoRenderer<MosinNagantItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, MosinNagantItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Mp443Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Mp443Layer extends GeoRenderLayer<Mp443Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/mp443_e.png");
|
|
||||||
|
|
||||||
public Mp443Layer(GeoRenderer<Mp443Item> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Mp443Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Mp443Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Mp443LightLayer extends GeoRenderLayer<Mp443Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/mp443_e.png");
|
|
||||||
|
|
||||||
public Mp443LightLayer(GeoRenderer<Mp443Item> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Mp443Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Ntw20Layer extends GeoRenderLayer<Ntw20Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/ntw_20_e.png");
|
|
||||||
|
|
||||||
public Ntw20Layer(GeoRenderer<Ntw20Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Ntw20Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class ProjectileEntityInsideLayer extends GeoRenderLayer<ProjectileEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/projectile_entity_inside.png");
|
|
||||||
|
|
||||||
public ProjectileEntityInsideLayer(GeoRenderer<ProjectileEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, ProjectileEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType),
|
|
||||||
partialTick, packedLight, OverlayTexture.NO_OVERLAY,
|
|
||||||
1, 1, 1, 0.2f);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class ProjectileEntityLayer extends GeoRenderLayer<ProjectileEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/projectile_entity.png");
|
|
||||||
|
|
||||||
public ProjectileEntityLayer(GeoRenderer<ProjectileEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, ProjectileEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
|
|
||||||
float r = animatable.getEntityData().get(ProjectileEntity.COLOR_R);
|
|
||||||
float g = animatable.getEntityData().get(ProjectileEntity.COLOR_G);
|
|
||||||
float b = animatable.getEntityData().get(ProjectileEntity.COLOR_B);
|
|
||||||
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType,
|
|
||||||
bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY,
|
|
||||||
r, g, b, 0.8f);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.Qbz95Item;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class Qbz95Layer extends GeoRenderLayer<Qbz95Item> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/qbz95_e.png");
|
|
||||||
|
|
||||||
public Qbz95Layer(GeoRenderer<Qbz95Item> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Qbz95Item animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class RpgLayer extends GeoRenderLayer<RpgItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/rpg7_e.png");
|
|
||||||
|
|
||||||
public RpgLayer(GeoRenderer<RpgItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, RpgItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.RpgRocketEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class RpgRocketLayer extends GeoRenderLayer<RpgRocketEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/rpg_rocket_e.png");
|
|
||||||
|
|
||||||
public RpgRocketLayer(GeoRenderer<RpgRocketEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, RpgRocketEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.RpkItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class RpkLayer extends GeoRenderLayer<RpkItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/rpk_e.png");
|
|
||||||
|
|
||||||
public RpkLayer(GeoRenderer<RpkItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, RpkItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.launcher.SecondaryCataclysm;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SecondaryCataclysmLightLayer extends GeoRenderLayer<SecondaryCataclysm> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/secondary_cataclysm_e.png");
|
|
||||||
|
|
||||||
public SecondaryCataclysmLightLayer(GeoRenderer<SecondaryCataclysm> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SecondaryCataclysm animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.SentinelItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SentinelLayer extends GeoRenderLayer<SentinelItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/sentinel_e.png");
|
|
||||||
|
|
||||||
public SentinelLayer(GeoRenderer<SentinelItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SentinelItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.SentinelItem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SentinelLightLayer extends GeoRenderLayer<SentinelItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/sentinel_e.png");
|
|
||||||
|
|
||||||
public SentinelLightLayer(GeoRenderer<SentinelItem> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SentinelItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.SksItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SksLayer extends GeoRenderLayer<SksItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/sks_e.png");
|
|
||||||
|
|
||||||
public SksLayer(GeoRenderer<SksItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SksItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.SmallCannonShellEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SmallCannonShellLayer extends GeoRenderLayer<SmallCannonShellEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/cannon_shell_e.png");
|
|
||||||
|
|
||||||
public SmallCannonShellLayer(GeoRenderer<SmallCannonShellEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SmallCannonShellEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity.HEAT;
|
|
||||||
|
|
||||||
public class SpeedBoatHeatLayer extends GeoRenderLayer<SpeedboatEntity> {
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/speedboat_heat.png");
|
|
||||||
|
|
||||||
public SpeedBoatHeatLayer(GeoRenderer<SpeedboatEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SpeedboatEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
float heat = animatable.getEntityData().get(HEAT) < 20 ? 0 : animatable.getEntityData().get(HEAT) - 20;
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, heat / 80, heat / 80, heat / 80, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SpeedBoatLayer extends GeoRenderLayer<SpeedboatEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/speedboat_e.png");
|
|
||||||
|
|
||||||
public SpeedBoatLayer(GeoRenderer<SpeedboatEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SpeedboatEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.energySwirl(LAYER,1,1);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SpeedBoatPowerLayer extends GeoRenderLayer<SpeedboatEntity> {
|
|
||||||
|
|
||||||
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/speedboat_power.png");
|
|
||||||
|
|
||||||
public SpeedBoatPowerLayer(GeoRenderer<SpeedboatEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SpeedboatEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
if (animatable.getEnergy() <= 0) return;
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class SvdLayer extends GeoRenderLayer<SvdItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/ak12_e.png");
|
|
||||||
|
|
||||||
public SvdLayer(GeoRenderer<SvdItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, SvdItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.TargetEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class TargetLayer extends GeoRenderLayer<TargetEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/target_e.png");
|
|
||||||
|
|
||||||
public TargetLayer(GeoRenderer<TargetEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, TargetEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Trachelium;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class TracheliumLayer extends GeoRenderLayer<Trachelium> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/trachelium_texture_e.png");
|
|
||||||
|
|
||||||
public TracheliumLayer(GeoRenderer<Trachelium> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Trachelium animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.ModRenderTypes;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.handgun.Trachelium;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class TracheliumLightLayer extends GeoRenderLayer<Trachelium> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/trachelium_texture_e.png");
|
|
||||||
|
|
||||||
public TracheliumLightLayer(GeoRenderer<Trachelium> itemGeoRenderer) {
|
|
||||||
super(itemGeoRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, Trachelium animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = ModRenderTypes.ILLUMINATED.apply(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.smg.VectorItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class VectorLayer extends GeoRenderLayer<VectorItem> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/vector_e.png");
|
|
||||||
|
|
||||||
public VectorLayer(GeoRenderer<VectorItem> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, VectorItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.WgMissileEntity;
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
|
||||||
import net.minecraft.client.renderer.RenderType;
|
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
|
||||||
import software.bernie.geckolib.renderer.GeoRenderer;
|
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
|
||||||
|
|
||||||
public class WgMissileLayer extends GeoRenderLayer<WgMissileEntity> {
|
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/entity/rpg_rocket_e.png");
|
|
||||||
|
|
||||||
public WgMissileLayer(GeoRenderer<WgMissileEntity> entityRenderer) {
|
|
||||||
super(entityRenderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(PoseStack poseStack, WgMissileEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
|
||||||
RenderType glowRenderType = RenderType.eyes(LAYER);
|
|
||||||
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue