Showing preview only (1,135K chars total). Download the full file or copy to clipboard to get everything.
Repository: Corosauce/weather2
Branch: 1.20
Commit: c023f4606218
Files: 283
Total size: 1.0 MB
Directory structure:
gitextract_0mtt1k7r/
├── .gitattributes
├── .github/
│ └── workflows/
│ └── gradle.yml
├── .gitignore
├── CONTRIBUTING.md
├── CREDITS.txt
├── LICENSE.txt
├── README.txt
├── build.gradle
├── changelog.txt
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── libs/
│ └── coroutil-forge-1.20.1-1.3.7.jar
├── settings.gradle
└── src/
├── generated/
│ └── resources/
│ ├── .cache/
│ │ ├── 0d0f48ca72ebc11ea3eaf67230fd125a3c581fa7
│ │ ├── 59eb3dbb5f86130e09b3c62d89b9525ee01cf52d
│ │ ├── 9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e
│ │ └── f991d9ad226694c30732bf45648e031ffa7d50dc
│ ├── assets/
│ │ └── minecraft/
│ │ └── atlases/
│ │ ├── blocks.json
│ │ └── particles.json
│ └── data/
│ └── weather2/
│ ├── advancements/
│ │ └── recipes/
│ │ └── misc/
│ │ ├── anemometer.json
│ │ ├── sand_layer.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_siren.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── weather_item.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ ├── loot_tables/
│ │ └── blocks/
│ │ ├── anemometer.json
│ │ ├── sand_layer.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_siren.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ └── recipes/
│ ├── anemometer.json
│ ├── sand_layer.json
│ ├── tornado_sensor.json
│ ├── tornado_siren.json
│ ├── weather_deflector.json
│ ├── weather_forecast.json
│ ├── weather_item.json
│ ├── wind_turbine.json
│ └── wind_vane.json
└── main/
├── java/
│ ├── extendedrenderer/
│ │ ├── ExtendedRenderer.java
│ │ ├── ParticleManagerExtended.java
│ │ ├── ParticleRegistry2ElectricBubbleoo.java
│ │ ├── WeatherSpriteSourceProvider.java
│ │ └── particle/
│ │ ├── ParticleRegistry.java
│ │ ├── behavior/
│ │ │ ├── ParticleBehaviorFog.java
│ │ │ ├── ParticleBehaviorSandstorm.java
│ │ │ └── ParticleBehaviors.java
│ │ └── entity/
│ │ ├── DustEmitter.java
│ │ ├── EntityRotFX.java
│ │ ├── ParticleCrossSection.java
│ │ ├── ParticleCube.java
│ │ ├── ParticleEmitter.java
│ │ ├── ParticleTexExtraRender.java
│ │ ├── ParticleTexFX.java
│ │ ├── ParticleTexLeafColor.java
│ │ ├── PivotingParticle.java
│ │ └── WaterDropParticleImpl.java
│ └── weather2/
│ ├── ClientRegistry.java
│ ├── ClientTickHandler.java
│ ├── ClientWeatherHelper.java
│ ├── ClientWeatherProxy.java
│ ├── DeferredHelper.java
│ ├── EntityRegistry.java
│ ├── EventHandlerForge.java
│ ├── IWindHandler.java
│ ├── IWorldData.java
│ ├── PacketNBTFromClient.java
│ ├── PacketNBTFromServer.java
│ ├── PerlinNoiseHelper.java
│ ├── ServerTickHandler.java
│ ├── ServerWeatherProxy.java
│ ├── SoundRegistry.java
│ ├── Weather.java
│ ├── WeatherBlocks.java
│ ├── WeatherItems.java
│ ├── WeatherNetworking.java
│ ├── WeatherTab.java
│ ├── WorldNBTData.java
│ ├── block/
│ │ ├── AnemometerBlock.java
│ │ ├── DeflectorBlock.java
│ │ ├── ForecastBlock.java
│ │ ├── SandLayerBlock.java
│ │ ├── SensorBlock.java
│ │ ├── SirenBlock.java
│ │ ├── WeatherMachineBlock.java
│ │ ├── WindTurbineBlock.java
│ │ └── WindVaneBlock.java
│ ├── blockentity/
│ │ ├── AnemometerBlockEntity.java
│ │ ├── DeflectorBlockEntity.java
│ │ ├── SensorBlockEntity.java
│ │ ├── SirenBlockEntity.java
│ │ ├── WeatherMachineBlockEntity.java
│ │ ├── WindTurbineBlockEntity.java
│ │ └── WindVaneBlockEntity.java
│ ├── client/
│ │ ├── MovingSoundStreamingSource.java
│ │ ├── SceneEnhancer.java
│ │ ├── entity/
│ │ │ ├── model/
│ │ │ │ ├── AnemometerModel.java
│ │ │ │ ├── WindTurbineModel.java
│ │ │ │ └── WindVaneModel.java
│ │ │ ├── particle/
│ │ │ │ ├── ParticleHail.java
│ │ │ │ └── ParticleSandstorm.java
│ │ │ └── render/
│ │ │ └── LightningBoltWeatherNewRenderer.java
│ │ └── tile/
│ │ ├── AnemometerEntityRenderer.java
│ │ ├── WindTurbineEntityRenderer.java
│ │ └── WindVaneEntityRenderer.java
│ ├── command/
│ │ ├── CommandWeather2Client.java
│ │ └── WeatherCommand.java
│ ├── config/
│ │ ├── ClientConfigData.java
│ │ ├── ConfigDebug.java
│ │ ├── ConfigFoliage.java
│ │ ├── ConfigMisc.java
│ │ ├── ConfigParticle.java
│ │ ├── ConfigSand.java
│ │ ├── ConfigSnow.java
│ │ ├── ConfigSound.java
│ │ ├── ConfigStorm.java
│ │ ├── ConfigTornado.java
│ │ ├── ConfigWind.java
│ │ └── WeatherUtilConfig.java
│ ├── data/
│ │ ├── BlockAndItemProvider.java
│ │ ├── BlockLootTables.java
│ │ └── WeatherRecipeProvider.java
│ ├── datatypes/
│ │ ├── PrecipitationType.java
│ │ ├── StormState.java
│ │ └── WeatherEventType.java
│ ├── energy/
│ │ └── EnergyManager.java
│ ├── item/
│ │ └── WeatherItem.java
│ ├── ltcompat/
│ │ ├── ClientWeatherIntegration.java
│ │ └── ServerWeatherIntegration.java
│ ├── mixin/
│ │ └── client/
│ │ ├── GameRendererOverride.java
│ │ └── RenderParticlesOverride.java
│ ├── player/
│ │ └── PlayerData.java
│ ├── util/
│ │ ├── CachedNBTTagCompound.java
│ │ ├── WeatherUtil.java
│ │ ├── WeatherUtilBlock.java
│ │ ├── WeatherUtilDim.java
│ │ ├── WeatherUtilEntity.java
│ │ ├── WeatherUtilParticle.java
│ │ ├── WeatherUtilPhysics.java
│ │ ├── WeatherUtilSound.java
│ │ └── WindReader.java
│ └── weathersystem/
│ ├── WeatherManager.java
│ ├── WeatherManagerClient.java
│ ├── WeatherManagerServer.java
│ ├── fog/
│ │ ├── FogAdjuster.java
│ │ └── FogProfile.java
│ ├── storm/
│ │ ├── EnumWeatherObjectType.java
│ │ ├── LightningBoltWeather.java
│ │ ├── LightningBoltWeatherNew.java
│ │ ├── StormObject.java
│ │ ├── TornadoHelper.java
│ │ ├── WeatherEntityConfig.java
│ │ ├── WeatherObject.java
│ │ ├── WeatherObjectParticleStorm.java
│ │ ├── WeatherObjectSandstormOld.java
│ │ └── WeatherTypes.java
│ ├── tornado/
│ │ ├── ActiveTornadoConfig.java
│ │ ├── CatmullRomSpline.java
│ │ ├── CubicBezierCurve.java
│ │ ├── Path.java
│ │ ├── TornadoFunnel.java
│ │ ├── TornadoManagerTodoRenameMe.java
│ │ ├── Vector.java
│ │ └── simple/
│ │ ├── Layer.java
│ │ └── TornadoFunnelSimple.java
│ └── wind/
│ ├── WindInfoCache.java
│ └── WindManager.java
└── resources/
├── META-INF/
│ ├── accesstransformer.cfg
│ └── mods.toml
├── assets/
│ ├── coroutil/
│ │ ├── blockstates/
│ │ │ ├── blank.json
│ │ │ └── repairing_block.json
│ │ ├── config/
│ │ │ ├── loot_tables/
│ │ │ │ ├── testloot.json
│ │ │ │ └── testlootboss.json
│ │ │ └── templates/
│ │ │ ├── actions/
│ │ │ │ ├── mob_spawns.json
│ │ │ │ ├── mob_spawns_example_commented.json
│ │ │ │ └── mob_spawns_testing_miners.json
│ │ │ ├── cmods/
│ │ │ │ ├── all_cmods.json
│ │ │ │ └── invasions_cmods.json
│ │ │ └── conditions/
│ │ │ ├── all_conditions.json
│ │ │ └── invasions_stages.json
│ │ ├── lang/
│ │ │ └── en_us.json
│ │ ├── models/
│ │ │ ├── block/
│ │ │ │ ├── blank.json
│ │ │ │ └── repairing_block.json
│ │ │ └── item/
│ │ │ ├── item_repairing_gel.json
│ │ │ └── repairing_block.json
│ │ ├── shaders/
│ │ │ ├── foliage.fs
│ │ │ ├── foliage.vs
│ │ │ ├── particle.fs
│ │ │ └── particle.vs
│ │ └── textures/
│ │ └── particles/
│ │ ├── cloud.xcf
│ │ ├── cloud256.xcf
│ │ ├── clouds.xcf
│ │ └── hail.xcf
│ └── weather2/
│ ├── blockstates/
│ │ ├── anemometer.json
│ │ ├── sand_layer.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_sensor_new.json
│ │ ├── tornado_siren.json
│ │ ├── tornado_siren_manual.json
│ │ ├── tornado_siren_old.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── weather_machine.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ ├── lang/
│ │ └── en_us.json
│ ├── models/
│ │ ├── block/
│ │ │ ├── anemometer.json
│ │ │ ├── sand_height10.json
│ │ │ ├── sand_height12.json
│ │ │ ├── sand_height14.json
│ │ │ ├── sand_height2.json
│ │ │ ├── sand_height4.json
│ │ │ ├── sand_height6.json
│ │ │ ├── sand_height8.json
│ │ │ ├── tornado_sensor.json
│ │ │ ├── tornado_siren.json
│ │ │ ├── tornado_siren_manual.json
│ │ │ ├── weather_deflector.json
│ │ │ ├── weather_forecast.json
│ │ │ ├── weather_machine.json
│ │ │ ├── wind_turbine.json
│ │ │ └── wind_vane.json
│ │ └── item/
│ │ ├── anemometer.json
│ │ ├── pocket_sand.json
│ │ ├── sand_layer.json
│ │ ├── sand_layer_placeable.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_siren.json
│ │ ├── tornado_siren_manual.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── weather_item.json
│ │ ├── weather_machine.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ ├── particles/
│ │ └── acidrain_splash.json
│ ├── shaders/
│ │ ├── core/
│ │ │ ├── rendertype_clouds.fsh
│ │ │ ├── rendertype_clouds.json
│ │ │ ├── rendertype_clouds.vsh
│ │ │ ├── rendertype_clouds_orig.vsh
│ │ │ └── rendertype_clouds_wip.json
│ │ └── include/
│ │ └── classicnoise3d.glsl
│ ├── sounds/
│ │ ├── env/
│ │ │ ├── waterfall.ogg
│ │ │ ├── wind_calm.ogg
│ │ │ └── wind_calmfade.ogg
│ │ └── streaming/
│ │ ├── destruction.ogg
│ │ ├── destruction_0_.ogg
│ │ ├── destruction_1_.ogg
│ │ ├── destruction_2_.ogg
│ │ ├── destruction_s.ogg
│ │ ├── destructionb.ogg
│ │ ├── sandstorm_high1.ogg
│ │ ├── sandstorm_low1.ogg
│ │ ├── sandstorm_low2.ogg
│ │ ├── sandstorm_med1.ogg
│ │ ├── sandstorm_med2.ogg
│ │ ├── siren.ogg
│ │ ├── siren_sandstorm_1.ogg
│ │ ├── siren_sandstorm_2.ogg
│ │ ├── siren_sandstorm_3.ogg
│ │ ├── siren_sandstorm_4.ogg
│ │ ├── siren_sandstorm_5_extra.ogg
│ │ ├── siren_sandstorm_6_extra.ogg
│ │ ├── wind_close.ogg
│ │ ├── wind_close_0_.ogg
│ │ ├── wind_close_1_.ogg
│ │ ├── wind_close_2_.ogg
│ │ ├── wind_far.ogg
│ │ ├── wind_far_0_.ogg
│ │ ├── wind_far_1_.ogg
│ │ └── wind_far_2_.ogg
│ └── sounds.json
├── pack.mcmeta
└── weather2.mixins.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Disable autocrlf on generated files, they always generate with LF
# Add any extra files or paths here to make git stop saying they
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf
================================================
FILE: .github/workflows/gradle.yml
================================================
name: Java CI with Gradle
on: [push]
jobs:
jdk17:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build with Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build
- name: Locate built JARfile
id: jar
run: jarfile=$(find build/libs/ -name "*-all.jar" -not -name "*slim*" -not -name "*source*" | tr '\n' ' '); echo "jarfile=$jarfile" >> $GITHUB_OUTPUT
- name: Set Artifact name
id: jarname
run: jarname=$(find build/libs/ -name "*-all.jar" -not -name "*slim*" -not -name "*source*" | sed 's:.*/::' | tr '\n' ' '); echo "jarname=$jarname" >> $GITHUB_OUTPUT
- name: Upload artifact
uses: actions/upload-artifact@v2.2.3
with:
name: ${{ steps.jarname.outputs.jarname }}
path: ${{ steps.jar.outputs.jarfile }}
================================================
FILE: .gitignore
================================================
# eclipse
bin
*.launch
.settings
.metadata
.classpath
.project
# idea
out
*.ipr
*.iws
*.iml
.idea
# gradle
build
.gradle
# other
eclipse
run
run-data
# Files from Forge MDK
forge*changelog.txt
libs_off
================================================
FILE: CONTRIBUTING.md
================================================
## Pull Requests
#### New Pull Requests are not accepted right now, and will be closed.
================================================
FILE: CREDITS.txt
================================================
Minecraft Forge: Credits/Thank You
Forge is a set of tools and modifications to the Minecraft base game code to assist
mod developers in creating new and exciting content. It has been in development for
several years now, but I would like to take this time thank a few people who have
helped it along it's way.
First, the people who originally created the Forge projects way back in Minecraft
alpha. Eloraam of RedPower, and SpaceToad of Buildcraft, without their acceptiance
of me taking over the project, who knows what Minecraft modding would be today.
Secondly, someone who has worked with me, and developed some of the core features
that allow modding to be as functional, and as simple as it is, cpw. For developing
FML, which stabelized the client and server modding ecosystem. As well as the base
loading system that allows us to modify Minecraft's code as elegently as possible.
Mezz, who has stepped up as the issue and pull request manager. Helping to keep me
sane as well as guiding the community into creating better additions to Forge.
Searge, Bspks, Fesh0r, ProfMobious, and all the rest over on the MCP team {of which
I am a part}. For creating some of the core tools needed to make Minecraft modding
both possible, and as stable as can be.
On that note, here is some specific information of the MCP data we use:
* Minecraft Coder Pack (MCP) *
Forge Mod Loader and Minecraft Forge have permission to distribute and automatically
download components of MCP and distribute MCP data files. This permission is not
transitive and others wishing to redistribute the Minecraft Forge source independently
should seek permission of MCP or remove the MCP data files and request their users
to download MCP separately.
And lastly, the countless community members who have spent time submitting bug reports,
pull requests, and just helping out the community in general. Thank you.
--LexManos
=========================================================================
This is Forge Mod Loader.
You can find the source code at all times at https://github.com/MinecraftForge/MinecraftForge/tree/1.12.x/src/main/java/net/minecraftforge/fml
This minecraft mod is a clean open source implementation of a mod loader for minecraft servers
and minecraft clients.
The code is authored by cpw.
It began by partially implementing an API defined by the client side ModLoader, authored by Risugami.
http://www.minecraftforum.net/topic/75440-
This support has been dropped as of Minecraft release 1.7, as Risugami no longer maintains ModLoader.
It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge.
http://www.minecraftforge.net/
Additionally, it contains an implementation of topological sort based on that
published at http://keithschwarz.com/interesting/code/?dir=topological-sort
It also contains code from the Maven project for performing versioned dependency
resolution. http://maven.apache.org/
It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/
with credit to it's authors.
Forge Mod Loader downloads components from the Minecraft Coder Pack
(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team.
================================================
FILE: LICENSE.txt
================================================
Unless noted below, Minecraft Forge, Forge Mod Loader, and all
parts herein are licensed under the terms of the LGPL 2.1 found
here http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt and
copied below.
Homepage: http://minecraftforge.net/
https://github.com/MinecraftForge/MinecraftForge
A note on authorship:
All source artifacts are property of their original author, with
the exclusion of the contents of the patches directory and others
copied from it from time to time. Authorship of the contents of
the patches directory is retained by the Minecraft Forge project.
This is because the patches are partially machine generated
artifacts, and are changed heavily due to the way forge works.
Individual attribution within them is impossible.
Consent:
All contributions to Forge must consent to the release of any
patch content to the Forge project.
A note on infectivity:
The LGPL is chosen specifically so that projects may depend on Forge
features without being infected with its license. That is the
purpose of the LGPL. Mods and others using this code via ordinary
Java mechanics for referencing libraries are specifically not bound
by Forge's license for the Mod code.
=== MCP Data ===
This software includes data from the Minecraft Coder Pack (MCP), with kind permission
from them. The license to MCP data is not transitive - distribution of this data by
third parties requires independent licensing from the MCP team. This data is not
redistributable without permission from the MCP team.
=== Sharing ===
I grant permission for some parts of FML to be redistributed outside the terms of the LGPL, for the benefit of
the minecraft modding community. All contributions to these parts should be licensed under the same additional grant.
-- Runtime patcher --
License is granted to redistribute the runtime patcher code (src/main/java/net/minecraftforge/fml/common/patcher
and subdirectories) under any alternative open source license as classified by the OSI (http://opensource.org/licenses)
-- ASM transformers --
License is granted to redistribute the ASM transformer code (src/main/java/net/minecraftforge/common/asm/ and subdirectories)
under any alternative open source license as classified by the OSI (http://opensource.org/licenses)
=========================================================================
This software includes portions from the Apache Maven project at
http://maven.apache.org/ specifically the ComparableVersion.java code. It is
included based on guidelines at
http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html
with notices intact. The only change is a non-functional change of package name.
This software contains a partial repackaging of javaxdelta, a BSD licensed program for generating
binary differences and applying them, sourced from the subversion at http://sourceforge.net/projects/javaxdelta/
authored by genman, heikok, pivot.
The only changes are to replace some Trove collection types with standard Java collections, and repackaged.
=========================================================================
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
================================================
FILE: README.txt
================================================
Source installation information for modders
-------------------------------------------
This code follows the Minecraft Forge installation methodology. It will apply
some small patches to the vanilla MCP source code, giving you and it access
to some of the data and functions you need to build a successful mod.
Note also that the patches are built against "un-renamed" MCP source code (aka
SRG Names) - this means that you will not be able to read them directly against
normal code.
Setup Process:
==============================
Step 1: Open your command-line and browse to the folder where you extracted the zip file.
Step 2: You're left with a choice.
If you prefer to use Eclipse:
1. Run the following command: `gradlew genEclipseRuns` (`./gradlew genEclipseRuns` if you are on Mac/Linux)
2. Open Eclipse, Import > Existing Gradle Project > Select Folder
or run `gradlew eclipse` to generate the project.
If you prefer to use IntelliJ:
1. Open IDEA, and import project.
2. Select your build.gradle file and have it import.
3. Run the following command: `gradlew genIntellijRuns` (`./gradlew genIntellijRuns` if you are on Mac/Linux)
4. Refresh the Gradle Project in IDEA if required.
If at any point you are missing libraries in your IDE, or you've run into problems you can
run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything
{this does not affect your code} and then start the process again.
Mapping Names:
=============================
By default, the MDK is configured to use the official mapping names from Mojang for methods and fields
in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this
license, if you do not agree with it you can change your mapping names to other crowdsourced names in your
build.gradle. For the latest license text, refer to the mapping file itself, or the reference copy here:
https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
Additional Resources:
=========================
Community Documentation: http://mcforge.readthedocs.io/en/latest/gettingstarted/
LexManos' Install Video: https://www.youtube.com/watch?v=8VEdtQLuLO0
Forge Forum: https://forums.minecraftforge.net/
Forge Discord: https://discord.gg/UvedJ9m
================================================
FILE: build.gradle
================================================
buildscript {
repositories {
maven {
name = 'sponge'
url = 'https://repo.spongepowered.org/repository/maven-public/'
}
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
classpath "org.spongepowered:mixingradle:0.7-SNAPSHOT"
}
}
plugins {
id 'eclipse'
id 'idea'
id 'maven-publish'
id 'net.minecraftforge.gradle' version '[6.0,6.2)'
}
version = mod_version
group = mod_group_id
base {
archivesName = mod_id
}
ext.buildnumber = 0
ext.projversion = 0
project.projversion = mod_version
archivesBaseName = mod_id
if (System.getenv('GITHUB_RUN_NUMBER')) {
project.buildnumber = System.getenv('GITHUB_RUN_NUMBER')
version = "${projversion}+${buildnumber}-gha"
} else {
version = "${projversion}"
}
// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
minecraft {
// The mappings can be changed at any time and must be in the following format.
// Channel: Version:
// official MCVersion Official field/method names from Mojang mapping files
// parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official
//
// You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
// See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
//
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
// Additional setup is needed to use their mappings: https://parchmentmc.org/docs/getting-started
//
// Use non-default mappings at your own risk. They may not always work.
// Simply re-run your setup task after changing the mappings to update your workspace.
mappings channel: mapping_channel, version: mapping_version
// When true, this property will have all Eclipse/IntelliJ IDEA run configurations run the "prepareX" task for the given run configuration before launching the game.
// In most cases, it is not necessary to enable.
// enableEclipsePrepareRuns = true
// enableIdeaPrepareRuns = true
// This property allows configuring Gradle's ProcessResources task(s) to run on IDE output locations before launching the game.
// It is REQUIRED to be set to true for this template to function.
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
copyIdeResources = true
// When true, this property will add the folder name of all declared run configurations to generated IDE run configurations.
// The folder name can be set on a run configuration using the "folderName" property.
// By default, the folder name of a run configuration is the name of the Gradle project containing it.
// generateRunFolders = true
// This property enables access transformers for use in development.
// They will be applied to the Minecraft artifact.
// The access transformer file can be anywhere in the project.
// However, it must be at "META-INF/accesstransformer.cfg" in the final mod jar to be loaded by Forge.
// This default location is a best practice to automatically put the file in the right place in the final jar.
// See https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ for more information.
accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
// applies to all the run configs below
configureEach {
workingDirectory project.file('run')
arg "-mixin.config=weather2.mixins.json"
// 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.
property '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
property 'forge.logging.console.level', 'debug'
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
mods {
"${mod_id}" {
source sourceSets.main
}
}
}
client {
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', mod_id
}
server {
property 'forge.enabledGameTestNamespaces', mod_id
args '--nogui'
}
// 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 {
property 'forge.enabledGameTestNamespaces', mod_id
}
data {
// example of overriding the workingDirectory set in configureEach above
workingDirectory project.file('run-data')
// Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
}
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
apply plugin: 'org.spongepowered.mixin'
mixin {
add sourceSets.main, 'weather2.refmap.json'
config 'weather2.mixins.json'
}
configurations {
modImpl
implementation.extendsFrom(modImpl)
testImplementation.extendsFrom(modImpl)
modRuntime
runtimeOnly.extendsFrom(modRuntime)
testRuntimeOnly.extendsFrom(modRuntime)
modCompile
compileOnly.extendsFrom(modCompile)
testCompileOnly.extendsFrom(modCompile)
}
repositories {
// Put repositories for dependencies here
// ForgeGradle automatically adds the Forge maven and Maven Central for you
maven { url = "https://maven.tterrag.com/" }
maven { url = "https://api.modrinth.com/maven" }
maven {
name = 'sponge'
url = 'https://repo.spongepowered.org/repository/maven-public/'
}
// If you have mod jar dependencies in ./libs, you can declare them as a repository like so.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver
flatDir {
dir 'libs'
}
}
dependencies {
// Specify the version of Minecraft to use.
// Any artifact can be supplied so long as it has a "userdev" classifier artifact and is a compatible patcher artifact.
// The "userdev" classifier will be requested and setup by ForgeGradle.
// If the group id is "net.minecraft" and the artifact id is one of ["client", "server", "joined"],
// then special handling is done to allow a setup of a vanilla dependency without the use of an external repository.
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
//implementation fg.deobf('com.corosus.coroutil:coroutil:1.20.1-1.3.3')
implementation fg.deobf('com.corosus.coroutil:coroutil-forge:1.20.1-1.3.7')
//implementation fg.deobf('com.corosus.enderio:EnderIO:1.20.1-6.0.21-alpha')
//implementation fg.deobf('com.corosus.pipez:pipez:1.20.1-1.1.5')
//implementation fg.deobf('oculus:oculus:mc1.20.1-1.6.9')
//implementation fg.deobf('rubidium:rubidium:mc1.20.1-0.7.1')
//implementation fg.deobf('spark:spark:1.10.42-forge')
//implementation fg.deobf('tropicraft:tropicraft:9.6.3-beta+551-gha')
annotationProcessor 'org.spongepowered:mixin:0.8.5-SNAPSHOT:processor'
//implementation fg.deobf('com.lovetropics.ltweather:ltweather:1.20.1-1.0')
//implementation fg.deobf('com.lovetropics.minigames:LTMinigames:0.1.0-alpha+custom')
//modImpl fg.deobf('maven.modrinth:tropicraft:9.6.1-1.20.1')
//implementation fg.deobf("com.tterrag.registrate:Registrate:MC1.20-${registrate_version}")
//jarJar(modCompile(fg.deobf("com.tterrag.registrate:Registrate:$registrate_version"))) {
//jarJar.ranged(it, "[$registrate_version,MC1.21)")
//}
// Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}")
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}")
// runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}")
// 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 fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")
// 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.
// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments.
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
tasks.named('processResources', ProcessResources).configure {
var replaceProperties = [
minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range,
forge_version: forge_version, forge_version_range: forge_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_authors: mod_authors, mod_description: mod_description,
]
inputs.properties replaceProperties
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
expand replaceProperties + [project: project]
}
}
// Example for how to get properties into the manifest for reading at runtime.
tasks.named('jar', Jar).configure {
manifest {
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"),
'MixinConfigs': 'weather2.mixins.json'
])
}
// This is the preferred method to reobfuscate your jar file
finalizedBy 'reobfJar'
}
// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing:
// tasks.named('publish').configure {
// dependsOn 'reobfJar'
// }
// Example configuration to allow publishing using the maven-publish plugin
publishing {
publications {
register('mavenJava', MavenPublication) {
artifact jar
}
}
repositories {
maven {
url "file://${project.projectDir}/mcmodsrepo"
}
}
}
tasks.named('jarJar').configure {
archiveClassifier = ''
finalizedBy 'reobfJarJar'
}
reobf {
jarJar { }
}
task sourceJar(type: Jar, dependsOn: classes) {
archiveClassifier = 'sources'
from sourceSets.main.java
}
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}
================================================
FILE: changelog.txt
================================================
Build: 1.18.1-39.0.5 - Mon Dec 13 21:58:30 GMT 2021
pupnewfster:
Add RenderArmEvent to make overriding just the arm rendering not require copying nearly as much vanilla code (#8254)
=========
Build: 1.18.1-39.0.4 - Mon Dec 13 21:32:20 GMT 2021
bageldotjpg:
Add MobEffect tags (#8231)
=========
Build: 1.18.1-39.0.3 - Mon Dec 13 19:49:00 GMT 2021
xfacthd:
Log missing or unsupported dependencies (#8218)
=========
Build: 1.18.1-39.0.2 - Mon Dec 13 19:33:05 GMT 2021
sciwhiz12:
Fix datagen test for sounds definitions provider (#8249)
=========
Build: 1.18.1-39.0.1 - Mon Dec 13 19:14:15 GMT 2021
williewillus:
Fix wrong stage being declared in transition to common (#8267)
=========
Build: 1.18.1-39.0.0 - Fri Dec 10 19:32:24 GMT 2021
curle:
Update to 1.18.1
Co-Authored by:
- Curle
_ Orion
=========
Build: 1.18-38.0.17 - Fri Dec 10 09:23:45 GMT 2021
oriondevelopment:
[CVE-2021-44228]: Update Log4J to fix the security issue inside it. (#8268)
=========
Build: 1.18-38.0.16 - Wed Dec 08 00:09:40 GMT 2021
jaredlll08:
Fix KeyMappings only checking if they conflict with themselves. (#8256)
=========
Build: 1.18-38.0.15 - Sun Dec 05 19:40:15 GMT 2021
xfacthd:
Fix ChunkWatchEvent not being fired (#8253)
=========
Build: 1.18-38.0.14 - Sat Dec 04 01:30:30 GMT 2021
git:
Call handleUpdateTag for BlockEntities again (#8237)
=========
Build: 1.18-38.0.13 - Fri Dec 03 22:10:25 GMT 2021
commoble:
Fix test worldgen data (#8248)
=========
Build: 1.18-38.0.12 - Thu Dec 02 20:16:47 GMT 2021
lexmanos:
Allow Forge Registries to return key information for overridden objects. Fixes #8230
=========
Build: 1.18-38.0.11 - Thu Dec 02 19:17:12 GMT 2021
curle:
Save Chunk capabilities to the chunk, rather than recursively to the capabilities.
=========
Build: 1.18-38.0.10 - Thu Dec 02 15:24:47 GMT 2021
gigaherz:
Make HandshakeConsumer public again.
Fixes #8241
gigaherz:
Fix LevelChunk capability attach crash.
Fix client chunks not having capability providers attached.
Add capability attach tests.
=========
Build: 1.18-38.0.8 - Thu Dec 02 00:44:15 GMT 2021
curle:
Add missing biomes back to the BiomeDictionary
curle:
Complete TODO in ShapedRecipe patch causing logspam related to minecraft:air
=========
Build: 1.18-38.0.6 - Wed Dec 01 22:12:05 GMT 2021
curle:
Readd Mixin 0.8.5 to fix modules issues.
=========
Build: 1.18-38.0.5 - Wed Dec 01 16:56:24 GMT 2021
curle:
Readd PoseStack field to RenderTooltipEvent.
=========
Build: 1.18-38.0.4 - Wed Dec 01 01:29:57 GMT 2021
curle:
Fix custom loot serializers using wrong registry names
=========
Build: 1.18-38.0.3 - Wed Dec 01 01:15:13 GMT 2021
lexmanos:
Fix DungeonHooks not returning correct values. Fixes dungeons in world spawning pigs.
=========
Build: 1.18-38.0.2 - Wed Dec 01 00:23:23 GMT 2021
lexmanos:
Fix dedicated server install. Closes #8226
Fix example mod
Fix obf issue with records. Closes #8228
Fix dependencies beingg out of sync from vanilla. Closes #8227
Disable mixin due to module incompatibility.
=========
Build: 1.18-38.0.1 - Tue Nov 30 20:56:52 GMT 2021
gigaherz:
Fix mod resources not loading.
Add BreakingItemParticle.java.patch which I forgot to commit during the porting.
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradle.properties
================================================
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
## Environment Properties
#for gh action
#registrate_version=1.3.3
#for dev testing
registrate_version=MC1.20-1.3.3
# The Minecraft version must agree with the Forge version to get a valid artifact
minecraft_version=1.20.1
# The Minecraft version range can use any release version of Minecraft as bounds.
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
# as they do not follow standard versioning conventions.
minecraft_version_range=[1.20.1,1.21)
# The Forge version must agree with the Minecraft version to get a valid artifact
forge_version=47.1.0
# The Forge version range can use any version of Forge as bounds or match the loader version range
forge_version_range=[47,)
# The loader version range can only use the major version of Forge/FML as bounds
loader_version_range=[47,)
# The mapping channel to use for mappings.
# The default set of supported mapping channels are ["official", "snapshot", "snapshot_nodoc", "stable", "stable_nodoc"].
# Additional mapping channels can be registered through the "channelProviders" extension in a Gradle plugin.
#
# | Channel | Version | |
# |-----------|----------------------|--------------------------------------------------------------------------------|
# | official | MCVersion | Official field/method names from Mojang mapping files |
# | parchment | YYYY.MM.DD-MCVersion | Open community-sourced parameter names and javadocs layered on top of official |
#
# You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
# See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
#
# Parchment is an unofficial project maintained by ParchmentMC, separate from Minecraft Forge.
# Additional setup is needed to use their mappings, see https://parchmentmc.org/docs/getting-started
mapping_channel=official
# The mapping version to query from the mapping channel.
# This must match the format required by the mapping channel.
mapping_version=1.20.1
## Mod Properties
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=weather2
# The human-readable display name for the mod.
mod_name=Weather2
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=All Rights Reserved
# The mod version. See https://semver.org/
mod_version=1.20.1-2.8.3
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
mod_group_id=com.corosus.weather2
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=Corosus
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description=Speeeeeeen
================================================
FILE: gradlew
================================================
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle
================================================
pluginManagement {
repositories {
gradlePluginPortal()
maven {
name = 'MinecraftForge'
url = 'https://maven.minecraftforge.net/'
}
}
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
}
================================================
FILE: src/generated/resources/.cache/0d0f48ca72ebc11ea3eaf67230fd125a3c581fa7
================================================
// 1.20.1 2023-11-22T02:08:00.197677 atlases generator for coroutil
74f8b853ba67f301962a10de1f0c163cbd8a8879 assets/minecraft/atlases/particles.json
================================================
FILE: src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d
================================================
// 1.20.1 2023-11-23T22:56:39.0222298 Loot Tables
c8c5ce560e926e54e54807bfa8292631975278c8 data/weather2/loot_tables/blocks/anemometer.json
c8c3920b1604bd0d96bb0f2fe36af5bec0d17a68 data/weather2/loot_tables/blocks/sand_layer.json
110f066250df5b3b40a1ab65f5db0e42b149bfc0 data/weather2/loot_tables/blocks/tornado_sensor.json
dab63dc3440645fa945cceb5bf0e90e65617307c data/weather2/loot_tables/blocks/tornado_siren.json
52d48e562562111bcbc28c4d88000e7f53be2c23 data/weather2/loot_tables/blocks/weather_deflector.json
c0a4e2a903db1b6c8a509f541f413283c73e4905 data/weather2/loot_tables/blocks/weather_forecast.json
5144ca5845a17038ade0ad75085ec40b1fe313d8 data/weather2/loot_tables/blocks/wind_turbine.json
9844b43ed3b5bdcf2cb5caa511707ef6bf53a3f9 data/weather2/loot_tables/blocks/wind_vane.json
================================================
FILE: src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e
================================================
// 1.20.1 2023-11-23T15:40:45.726425 Recipes
a6fcf55b00f782cb61ea7ff8c36947cc71d1b6eb data/weather2/advancements/recipes/misc/anemometer.json
f05e205a927078351fb102a2efb42abb0b621702 data/weather2/advancements/recipes/misc/sand_layer.json
1628c853ad5eb3f28a2183446344bc04891eb91c data/weather2/advancements/recipes/misc/tornado_sensor.json
f13d83986054c3bc720075107179268a8d729079 data/weather2/advancements/recipes/misc/tornado_siren.json
1a192c2be326846c2fd212595e7c1c8336494294 data/weather2/advancements/recipes/misc/weather_deflector.json
877fab4cc1e153017cbbc49bbecdb403dd48c4b8 data/weather2/advancements/recipes/misc/weather_forecast.json
7def7a8363c66c36f79299afc71c888668c6dc82 data/weather2/advancements/recipes/misc/weather_item.json
27039723785ab5a173e8f855f777dd90ca4f1712 data/weather2/advancements/recipes/misc/wind_turbine.json
31301eabe51f450b5c713189ed8800a6e56c85af data/weather2/advancements/recipes/misc/wind_vane.json
7191a7c546fa76fda67b9eff30be60d24c66c0f9 data/weather2/recipes/anemometer.json
bedb68269184b52e111d66ab1a430f50f74b2c1f data/weather2/recipes/sand_layer.json
386f9af237dac1c3ded5cb82859c8f2f409c994f data/weather2/recipes/tornado_sensor.json
8fd7a464306fd74e6d6fc771d0c918003125ade2 data/weather2/recipes/tornado_siren.json
fa3fbf7a57f04cd6bafe3d294d99e0359c3c1aae data/weather2/recipes/weather_deflector.json
5465cb6ea0be946f98da47fedcd7d4328a61a1ee data/weather2/recipes/weather_forecast.json
fc16ba8ec6cae16f7a3c29bba99215b13a13ef97 data/weather2/recipes/weather_item.json
e79f45df5a4ad54d1d56b36885e6be58135475d3 data/weather2/recipes/wind_turbine.json
fc56b6dad0bb7d6b22ae4b95d8c69cbcd964b4fa data/weather2/recipes/wind_vane.json
================================================
FILE: src/generated/resources/.cache/f991d9ad226694c30732bf45648e031ffa7d50dc
================================================
// 1.20.1 2023-11-17T01:47:33.0547988 atlases generator for weather2
8b58f99c389a93e757d0e4e05efaaa16ce22dd8c assets/minecraft/atlases/blocks.json
================================================
FILE: src/generated/resources/assets/minecraft/atlases/blocks.json
================================================
{
"sources": [
{
"type": "minecraft:single",
"resource": "weather2:blocks/tornado_siren"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/tornado_siren_manual"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/tornado_siren_manual_on"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/tornado_sensor"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/weather_deflector"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/weather_forecast"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/weather_machine"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/anemometer"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/wind_vane"
},
{
"type": "minecraft:single",
"resource": "weather2:blocks/wind_turbine"
},
{
"type": "minecraft:single",
"resource": "weather2:items/weather_item"
},
{
"type": "minecraft:single",
"resource": "weather2:items/sand_layer"
},
{
"type": "minecraft:single",
"resource": "weather2:items/sand_layer_placeable"
}
]
}
================================================
FILE: src/generated/resources/assets/minecraft/atlases/particles.json
================================================
{
"sources": [
{
"type": "minecraft:single",
"resource": "coroutil:particles/white"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/cloud256"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/cloud256_fire"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/cloud256_6"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/downfall3"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/chicken"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/potato"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/leaf"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/rain_white"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/snow"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/snow2"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/tumbleweed"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/debris_1"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/debris_2"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/debris_3"
},
{
"type": "minecraft:single",
"resource": "coroutil:particles/hail"
}
]
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/anemometer.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "weather2:anemometer"
},
"trigger": "minecraft:recipe_unlocked"
},
"has_weather_item": {
"conditions": {
"items": [
{
"items": [
"weather2:weather_item"
]
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_weather_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:anemometer"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/sand_layer.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_sand": {
"conditions": {
"items": [
{
"items": [
"minecraft:sand"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "weather2:sand_layer"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_sand",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:sand_layer"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/tornado_sensor.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "weather2:tornado_sensor"
},
"trigger": "minecraft:recipe_unlocked"
},
"has_weather_item": {
"conditions": {
"items": [
{
"items": [
"weather2:weather_item"
]
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_weather_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:tornado_sensor"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/tornado_siren.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_sensor_item": {
"conditions": {
"items": [
{
"items": [
"weather2:tornado_sensor"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "weather2:tornado_siren"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_sensor_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:tornado_siren"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/weather_deflector.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "weather2:weather_deflector"
},
"trigger": "minecraft:recipe_unlocked"
},
"has_weather_item": {
"conditions": {
"items": [
{
"items": [
"weather2:weather_item"
]
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_weather_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:weather_deflector"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/weather_forecast.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "weather2:weather_forecast"
},
"trigger": "minecraft:recipe_unlocked"
},
"has_weather_item": {
"conditions": {
"items": [
{
"items": [
"weather2:weather_item"
]
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_weather_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:weather_forecast"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/weather_item.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_redstone": {
"conditions": {
"items": [
{
"items": [
"minecraft:redstone"
]
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "weather2:weather_item"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_redstone",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:weather_item"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/wind_turbine.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "weather2:wind_turbine"
},
"trigger": "minecraft:recipe_unlocked"
},
"has_wind_vane": {
"conditions": {
"items": [
{
"items": [
"weather2:wind_turbine"
]
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_wind_vane",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:wind_turbine"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/advancements/recipes/misc/wind_vane.json
================================================
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "weather2:wind_vane"
},
"trigger": "minecraft:recipe_unlocked"
},
"has_weather_item": {
"conditions": {
"items": [
{
"items": [
"weather2:weather_item"
]
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_weather_item",
"has_the_recipe"
]
],
"rewards": {
"recipes": [
"weather2:wind_vane"
]
},
"sends_telemetry_event": false
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/anemometer.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:anemometer"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/anemometer"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/sand_layer.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:sand_layer"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/sand_layer"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/tornado_sensor.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:tornado_sensor"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/tornado_sensor"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/tornado_siren.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:tornado_siren"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/tornado_siren"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/weather_deflector.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:weather_deflector"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/weather_deflector"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/weather_forecast.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:weather_forecast"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/weather_forecast"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/wind_turbine.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:wind_turbine"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/wind_turbine"
}
================================================
FILE: src/generated/resources/data/weather2/loot_tables/blocks/wind_vane.json
================================================
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "weather2:wind_vane"
}
],
"rolls": 1.0
}
],
"random_sequence": "weather2:blocks/wind_vane"
}
================================================
FILE: src/generated/resources/data/weather2/recipes/anemometer.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"X": {
"item": "weather2:weather_item"
}
},
"pattern": [
"X X",
"XDX",
"X X"
],
"result": {
"item": "weather2:anemometer"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/sand_layer.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:sand"
}
},
"pattern": [
"DDD",
"D D",
"DDD"
],
"result": {
"count": 8,
"item": "weather2:sand_layer"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/tornado_sensor.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"I": {
"item": "weather2:weather_item"
},
"X": {
"item": "minecraft:iron_ingot"
}
},
"pattern": [
"X X",
"DID",
"X X"
],
"result": {
"item": "weather2:tornado_sensor"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/tornado_siren.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"I": {
"item": "weather2:tornado_sensor"
},
"X": {
"item": "minecraft:iron_ingot"
}
},
"pattern": [
"XDX",
"DID",
"XDX"
],
"result": {
"item": "weather2:tornado_siren"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/weather_deflector.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"I": {
"item": "weather2:weather_item"
},
"X": {
"item": "minecraft:iron_ingot"
}
},
"pattern": [
"XDX",
"DID",
"XDX"
],
"result": {
"item": "weather2:weather_deflector"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/weather_forecast.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"I": {
"item": "minecraft:compass"
},
"X": {
"item": "weather2:weather_item"
}
},
"pattern": [
"XDX",
"DID",
"XDX"
],
"result": {
"item": "weather2:weather_forecast"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/weather_item.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"I": {
"item": "minecraft:gold_ingot"
},
"X": {
"item": "minecraft:iron_ingot"
}
},
"pattern": [
"X X",
"DID",
"X X"
],
"result": {
"item": "weather2:weather_item"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/wind_turbine.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:diamond"
},
"G": {
"item": "minecraft:gold_ingot"
},
"I": {
"item": "minecraft:iron_block"
},
"O": {
"item": "minecraft:iron_ingot"
},
"R": {
"item": "minecraft:redstone_block"
},
"V": {
"item": "weather2:wind_vane"
}
},
"pattern": [
"ODO",
"IVI",
"RGR"
],
"result": {
"item": "weather2:wind_turbine"
},
"show_notification": true
}
================================================
FILE: src/generated/resources/data/weather2/recipes/wind_vane.json
================================================
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"D": {
"item": "minecraft:redstone"
},
"X": {
"item": "weather2:weather_item"
}
},
"pattern": [
"X X",
"DXD",
"X X"
],
"result": {
"item": "weather2:wind_vane"
},
"show_notification": true
}
================================================
FILE: src/main/java/extendedrenderer/ExtendedRenderer.java
================================================
package extendedrenderer;
public class ExtendedRenderer {
public static String modid = "coroutil";
}
================================================
FILE: src/main/java/extendedrenderer/ParticleManagerExtended.java
================================================
package extendedrenderer;
import com.google.common.collect.*;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.logging.LogUtils;
import extendedrenderer.particle.entity.EntityRotFX;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
import net.minecraft.ReportedException;
import net.minecraft.Util;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.particle.*;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.texture.SpriteLoader;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleGroup;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.FileToIdConverter;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.PreparableReloadListener;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.GsonHelper;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.util.profiling.ProfilerFiller;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.block.RenderShape;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.slf4j.Logger;
import javax.annotation.Nullable;
import java.io.IOException;
import java.io.Reader;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
@OnlyIn(Dist.CLIENT)
public class ParticleManagerExtended implements PreparableReloadListener {
private static final Logger LOGGER = LogUtils.getLogger();
private static final FileToIdConverter PARTICLE_LISTER = FileToIdConverter.json("particles");
private static final ResourceLocation PARTICLES_ATLAS_INFO = new ResourceLocation("particles");
private static final int MAX_PARTICLES_PER_LAYER = 16384;
private static final List<ParticleRenderType> RENDER_ORDER = ImmutableList.of(ParticleRenderType.TERRAIN_SHEET, ParticleRenderType.PARTICLE_SHEET_OPAQUE, ParticleRenderType.PARTICLE_SHEET_LIT, ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT, ParticleRenderType.CUSTOM, ParticleRenderType.CUSTOM, EntityRotFX.SORTED_OPAQUE_BLOCK, EntityRotFX.SORTED_TRANSLUCENT);
protected ClientLevel level;
private final Map<ParticleRenderType, Queue<Particle>> particles = Maps.newTreeMap(net.minecraftforge.client.ForgeHooksClient.makeParticleRenderTypeComparator(RENDER_ORDER));
private final Queue<TrackingEmitter> trackingEmitters = Queues.newArrayDeque();
private final TextureManager textureManager;
private final RandomSource random = RandomSource.create();
private final Map<ResourceLocation, ParticleProvider<?>> providers = new java.util.HashMap<>();
private final Queue<Particle> particlesToAdd = Queues.newArrayDeque();
private final Map<ResourceLocation, ParticleManagerExtended.MutableSpriteSet> spriteSets = Maps.newHashMap();
private final TextureAtlas textureAtlas;
private final Object2IntOpenHashMap<ParticleGroup> trackedParticleCounts = new Object2IntOpenHashMap<>();
public ParticleManagerExtended(ClientLevel p_107299_, TextureManager p_107300_) {
this.textureAtlas = new TextureAtlas(TextureAtlas.LOCATION_PARTICLES);
//p_107300_.register(this.textureAtlas.location(), this.textureAtlas);
this.level = p_107299_;
this.textureManager = p_107300_;
}
public CompletableFuture<Void> reload(PreparableReloadListener.PreparationBarrier p_107305_, ResourceManager p_107306_, ProfilerFiller p_107307_, ProfilerFiller p_107308_, Executor p_107309_, Executor p_107310_) {
@OnlyIn(Dist.CLIENT)
record ParticleDefinition(ResourceLocation id, Optional<List<ResourceLocation>> sprites) {
}
CompletableFuture<List<ParticleDefinition>> completablefuture = CompletableFuture.supplyAsync(() -> {
return PARTICLE_LISTER.listMatchingResources(p_107306_);
}, p_107309_).thenCompose((p_247914_) -> {
List<CompletableFuture<ParticleDefinition>> list = new ArrayList<>(p_247914_.size());
p_247914_.forEach((p_247903_, p_247904_) -> {
ResourceLocation resourcelocation = PARTICLE_LISTER.fileToId(p_247903_);
list.add(CompletableFuture.supplyAsync(() -> {
return new ParticleDefinition(resourcelocation, this.loadParticleDescription(resourcelocation, p_247904_));
}, p_107309_));
});
return Util.sequence(list);
});
CompletableFuture<SpriteLoader.Preparations> completablefuture1 = SpriteLoader.create(this.textureAtlas).loadAndStitch(p_107306_, PARTICLES_ATLAS_INFO, 0, p_107309_).thenCompose(SpriteLoader.Preparations::waitForUpload);
return CompletableFuture.allOf(completablefuture1, completablefuture).thenCompose(p_107305_::wait).thenAcceptAsync((p_247900_) -> {
this.clearParticles();
p_107308_.startTick();
p_107308_.push("upload");
SpriteLoader.Preparations spriteloader$preparations = completablefuture1.join();
this.textureAtlas.upload(spriteloader$preparations);
p_107308_.popPush("bindSpriteSets");
Set<ResourceLocation> set = new HashSet<>();
TextureAtlasSprite textureatlassprite = spriteloader$preparations.missing();
completablefuture.join().forEach((p_247911_) -> {
Optional<List<ResourceLocation>> optional = p_247911_.sprites();
if (!optional.isEmpty()) {
List<TextureAtlasSprite> list = new ArrayList<>();
for(ResourceLocation resourcelocation : optional.get()) {
TextureAtlasSprite textureatlassprite1 = spriteloader$preparations.regions().get(resourcelocation);
if (textureatlassprite1 == null) {
set.add(resourcelocation);
list.add(textureatlassprite);
} else {
list.add(textureatlassprite1);
}
}
if (list.isEmpty()) {
list.add(textureatlassprite);
}
this.spriteSets.get(p_247911_.id()).rebind(list);
}
});
if (!set.isEmpty()) {
LOGGER.warn("Missing particle sprites: {}", set.stream().sorted().map(ResourceLocation::toString).collect(Collectors.joining(",")));
}
p_107308_.pop();
p_107308_.endTick();
}, p_107310_);
}
public void close() {
this.textureAtlas.clearTextureData();
}
private Optional<List<ResourceLocation>> loadParticleDescription(ResourceLocation p_250648_, Resource p_248793_) {
if (!this.spriteSets.containsKey(p_250648_)) {
LOGGER.debug("Redundant texture list for particle: {}", (Object)p_250648_);
return Optional.empty();
} else {
try (Reader reader = p_248793_.openAsReader()) {
ParticleDescription particledescription = ParticleDescription.fromJson(GsonHelper.parse(reader));
return Optional.of(particledescription.getTextures());
} catch (IOException ioexception) {
throw new IllegalStateException("Failed to load description for particle " + p_250648_, ioexception);
}
}
}
@Nullable
private <T extends ParticleOptions> Particle makeParticle(T p_107396_, double p_107397_, double p_107398_, double p_107399_, double p_107400_, double p_107401_, double p_107402_) {
ParticleProvider<T> particleprovider = (ParticleProvider<T>)this.providers.get(BuiltInRegistries.PARTICLE_TYPE.getKey(p_107396_.getType()));
return particleprovider == null ? null : particleprovider.createParticle(p_107396_, this.level, p_107397_, p_107398_, p_107399_, p_107400_, p_107401_, p_107402_);
}
public void add(Particle p_107345_) {
Optional<ParticleGroup> optional = p_107345_.getParticleGroup();
if (optional.isPresent()) {
if (this.hasSpaceInParticleLimit(optional.get())) {
this.particlesToAdd.add(p_107345_);
this.updateCount(optional.get(), 1);
}
} else {
this.particlesToAdd.add(p_107345_);
}
}
public void tick() {
this.level.getProfiler().push("weather2_particle_tick");
this.particles.forEach((p_288249_, p_288250_) -> {
this.level.getProfiler().push("weather2_particle_tick_" + p_288249_.toString());
this.tickParticleList(p_288250_);
this.level.getProfiler().pop();
});
if (!this.trackingEmitters.isEmpty()) {
List<TrackingEmitter> list = Lists.newArrayList();
for(TrackingEmitter trackingemitter : this.trackingEmitters) {
trackingemitter.tick();
if (!trackingemitter.isAlive()) {
list.add(trackingemitter);
}
}
this.trackingEmitters.removeAll(list);
}
Particle particle;
if (!this.particlesToAdd.isEmpty()) {
while((particle = this.particlesToAdd.poll()) != null) {
this.particles.computeIfAbsent(particle.getRenderType(), (p_107347_) -> {
return EvictingQueue.create(16384 * 2);
}).add(particle);
}
}
this.level.getProfiler().pop();
}
private void tickParticleList(Collection<Particle> p_107385_) {
if (!p_107385_.isEmpty()) {
Iterator<Particle> iterator = p_107385_.iterator();
while(iterator.hasNext()) {
Particle particle = iterator.next();
this.tickParticle(particle);
if (!particle.isAlive()) {
particle.getParticleGroup().ifPresent((p_172289_) -> {
this.updateCount(p_172289_, -1);
});
iterator.remove();
}
}
}
}
private void updateCount(ParticleGroup p_172282_, int p_172283_) {
this.trackedParticleCounts.addTo(p_172282_, p_172283_);
}
private void tickParticle(Particle p_107394_) {
try {
p_107394_.tick();
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Ticking Particle");
CrashReportCategory crashreportcategory = crashreport.addCategory("Particle being ticked");
crashreportcategory.setDetail("Particle", p_107394_::toString);
crashreportcategory.setDetail("Particle Type", p_107394_.getRenderType()::toString);
throw new ReportedException(crashreport);
}
}
/**@deprecated Forge: use {@link #render(PoseStack, MultiBufferSource.BufferSource, LightTexture, Camera, float, net.minecraft.client.renderer.culling.Frustum)} with Frustum as additional parameter*/
@Deprecated
public void render(PoseStack p_107337_, MultiBufferSource.BufferSource p_107338_, LightTexture p_107339_, Camera p_107340_, float p_107341_) {
render(p_107337_, p_107338_, p_107339_, p_107340_, p_107341_, null);
}
public void render(PoseStack p_107337_, MultiBufferSource.BufferSource p_107338_, LightTexture p_107339_, Camera p_107340_, float p_107341_, @Nullable net.minecraft.client.renderer.culling.Frustum clippingHelper) {
this.level.getProfiler().push("weather2_particle_render");
//if (true) return;
float fogStart = RenderSystem.getShaderFogStart();
float fogEnd = RenderSystem.getShaderFogEnd();
RenderSystem.setShaderFogStart(fogStart * 4);
RenderSystem.setShaderFogEnd(fogEnd * 4);
p_107339_.turnOnLightLayer();
RenderSystem.enableDepthTest();
//these didnt exist in our 1.18 modification, why?
RenderSystem.activeTexture(org.lwjgl.opengl.GL13.GL_TEXTURE2);
RenderSystem.activeTexture(org.lwjgl.opengl.GL13.GL_TEXTURE0);
PoseStack posestack = RenderSystem.getModelViewStack();
posestack.pushPose();
posestack.mulPoseMatrix(p_107337_.last().pose());
RenderSystem.applyModelViewMatrix();
RenderSystem.disableCull();
int particleCount = 0;
for(ParticleRenderType particlerendertype : this.particles.keySet()) { // Forge: allow custom IParticleRenderType's
this.level.getProfiler().push(particlerendertype.toString());
if (particlerendertype == ParticleRenderType.NO_RENDER) continue;
Iterable<Particle> iterable = this.particles.get(particlerendertype);
if (iterable != null) {
RenderSystem.setShader(GameRenderer::getParticleShader);
Tesselator tesselator = Tesselator.getInstance();
BufferBuilder bufferbuilder = tesselator.getBuilder();
particlerendertype.begin(bufferbuilder, this.textureManager);
for(Particle particle : iterable) {
if (particle instanceof EntityRotFX) {
if (clippingHelper != null && particle.shouldCull() && !clippingHelper.isVisible(((EntityRotFX)particle).getBoundingBoxForRender(p_107341_)))
continue;
} else {
if (clippingHelper != null && particle.shouldCull() && !clippingHelper.isVisible(particle.getBoundingBox()))
continue;
}
try {
particle.render(bufferbuilder, p_107340_, p_107341_);
} catch (Throwable throwable) {
CrashReport crashreport = CrashReport.forThrowable(throwable, "Rendering Particle");
CrashReportCategory crashreportcategory = crashreport.addCategory("Particle being rendered");
crashreportcategory.setDetail("Particle", particle::toString);
crashreportcategory.setDetail("Particle Type", particlerendertype::toString);
throw new ReportedException(crashreport);
}
}
particlerendertype.end(tesselator);
}
this.level.getProfiler().pop();
}
posestack.popPose();
RenderSystem.applyModelViewMatrix();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
p_107339_.turnOffLightLayer();
RenderSystem.setShaderFogStart(fogStart);
RenderSystem.setShaderFogEnd(fogEnd);
this.level.getProfiler().pop();
}
public void setLevel(@Nullable ClientLevel p_107343_) {
this.level = p_107343_;
this.clearParticles();
this.trackingEmitters.clear();
}
public String countParticles() {
return String.valueOf(this.particles.values().stream().mapToInt(Collection::size).sum());
}
private boolean hasSpaceInParticleLimit(ParticleGroup p_172280_) {
return this.trackedParticleCounts.getInt(p_172280_) < p_172280_.getLimit();
}
public void clearParticles() {
this.particles.clear();
this.particlesToAdd.clear();
this.trackingEmitters.clear();
this.trackedParticleCounts.clear();
}
@OnlyIn(Dist.CLIENT)
static class MutableSpriteSet implements SpriteSet {
private List<TextureAtlasSprite> sprites;
public TextureAtlasSprite get(int p_107413_, int p_107414_) {
return this.sprites.get(p_107413_ * (this.sprites.size() - 1) / p_107414_);
}
public TextureAtlasSprite get(RandomSource p_233889_) {
return this.sprites.get(p_233889_.nextInt(this.sprites.size()));
}
public void rebind(List<TextureAtlasSprite> p_107416_) {
this.sprites = ImmutableList.copyOf(p_107416_);
}
}
public Map<ParticleRenderType, Queue<Particle>> getParticles() {
return particles;
}
}
================================================
FILE: src/main/java/extendedrenderer/ParticleRegistry2ElectricBubbleoo.java
================================================
package extendedrenderer;
import weather2.DeferredHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.WaterDropParticle;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.RegisterParticleProvidersEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.RegistryObject;
import weather2.Weather;
//@ObjectHolder(Weather.MODID)
@Mod.EventBusSubscriber(modid = Weather.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ParticleRegistry2ElectricBubbleoo {
//@ObjectHolder("acidrain_splash")
//public static SimpleParticleType ACIDRAIN_SPLASH;
public static final RegistryObject<SimpleParticleType> ACIDRAIN_SPLASH = Weather.R.particle("acidrain_splash", () -> new SimpleParticleType(false));
/*@SubscribeEvent
public static void registerParticles(RegistryEvent.Register<ParticleType<?>> evt){
SimpleParticleType acidrain_splash = new SimpleParticleType(false);
acidrain_splash.setRegistryName(Weather.MODID, "acidrain_splash");
evt.getRegistry().register(acidrain_splash);
}*/
/*@OnlyIn(Dist.CLIENT)
@SubscribeEvent
public static void registerParticleFactory(ParticleFactoryRegisterEvent evt){
Minecraft.getInstance().particleEngine.register(ParticleRegistry2ElectricBubbleoo.ACIDRAIN_SPLASH.get(),
WaterDropParticle.Provider::new);
}*/
@SubscribeEvent
@OnlyIn(Dist.CLIENT)
public static void factories(RegisterParticleProvidersEvent event) {
//event.registerSprite(ACIDRAIN_SPLASH.get(), WaterDropParticleImpl::new);
Minecraft.getInstance().particleEngine.register(new SimpleParticleType(false), WaterDropParticle.Provider::new);
//event.registerSpecial(new SimpleParticleType(false), WaterDropParticle.Provider::new);
}
public static void bootstrap() {}
}
================================================
FILE: src/main/java/extendedrenderer/WeatherSpriteSourceProvider.java
================================================
/*
* Copyright (c) Forge Development LLC and contributors
* SPDX-License-Identifier: LGPL-2.1-only
*/
package extendedrenderer;
import net.minecraft.client.renderer.texture.atlas.sources.SingleFile;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.common.data.SpriteSourceProvider;
import weather2.Weather;
import java.util.Optional;
public class WeatherSpriteSourceProvider extends SpriteSourceProvider
{
public WeatherSpriteSourceProvider(PackOutput output, ExistingFileHelper fileHelper)
{
super(output, fileHelper, Weather.MODID);
}
@Override
protected void addSources()
{
atlas(SpriteSourceProvider.PARTICLES_ATLAS).addSource(new SingleFile(new ResourceLocation(Weather.MODID + "white"), Optional.empty()));
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/ParticleRegistry.java
================================================
package extendedrenderer.particle;
import extendedrenderer.ExtendedRenderer;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.atlas.sources.SingleFile;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.common.data.SpriteSourceProvider;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import weather2.Weather;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class ParticleRegistry extends SpriteSourceProvider {
public static TextureAtlasSprite squareGrey;
public static TextureAtlasSprite smoke;
//public static TextureAtlasSprite smokeTest;
public static TextureAtlasSprite cloud;
public static TextureAtlasSprite cloud256;
public static TextureAtlasSprite cloud256_fire;
public static TextureAtlasSprite cloud256_test;
//public static TextureAtlasSprite cloud256_2;
public static TextureAtlasSprite groundSplash;
//public static TextureAtlasSprite downfall2;
public static TextureAtlasSprite downfall3;
//public static TextureAtlasSprite downfall4;
//public static TextureAtlasSprite cloud256_7;
public static TextureAtlasSprite chicken;
public static TextureAtlasSprite potato;
public static TextureAtlasSprite leaf;
public static TextureAtlasSprite rain;
public static TextureAtlasSprite rain_white;
//public static TextureAtlasSprite rain_white_trans;
//public static TextureAtlasSprite rain_white_2;
//public static TextureAtlasSprite rain_10;
//public static TextureAtlasSprite rain_vanilla;
//public static TextureAtlasSprite snow_vanilla;
public static TextureAtlasSprite snow;
public static TextureAtlasSprite snow2;
//public static TextureAtlasSprite test;
//public static TextureAtlasSprite cloud256dark;
//public static TextureAtlasSprite cloudDownfall;
public static TextureAtlasSprite tumbleweed;
public static TextureAtlasSprite debris_1;
public static TextureAtlasSprite debris_2;
public static TextureAtlasSprite debris_3;
public static TextureAtlasSprite test_texture;
public static TextureAtlasSprite white_square;
public static List<TextureAtlasSprite> listFish = new ArrayList<>();
//public static List<TextureAtlasSprite> listSeaweed = new ArrayList<>();
public static TextureAtlasSprite grass;
public static TextureAtlasSprite hail;
public static TextureAtlasSprite cloudNew;
public static TextureAtlasSprite cloud_square;
public static TextureAtlasSprite square16;
public static TextureAtlasSprite square64;
public ParticleRegistry(PackOutput output, ExistingFileHelper fileHelper)
{
super(output, fileHelper, ExtendedRenderer.modid);
}
@Override
protected void addSources()
{
//atlas(SpriteSourceProvider.PARTICLES_ATLAS).addSource(new SingleFile(new ResourceLocation(Weather.MODID + ":white"), Optional.empty()));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/smoke_00"));
//smokeTest = event.addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/smoke_2"));
//cloud = event.addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud64"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_fire"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_test"));
//cloud256_2 = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_5"));
//ground splash
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_6"));
//cloud256_7 = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_7"));
//downfall2 = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall2"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall3"));
//downfall4 = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall4"));
if (!Weather.isLoveTropicsInstalled()) {
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/chicken"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/potato"));
}
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/leaf"));
//rain = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/test_texture"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white_square"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_white"));
//rain_white_trans = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_white_trans"));
//rain_white_2 = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_white_2"));
//rain_10 = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_10"));
//rain_vanilla = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/vanilla/rain"));
//snow_vanilla = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/vanilla/snow"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/snow"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/snow2"));
//cloud256dark = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256dark"));
//cloudDownfall = addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/tumbleweed"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/debris_1"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/debris_2"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/debris_3"));
/*for (int i = 1; i <= 9; i++) {
listFish.add(addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/fish_" + i)));
}
for (int i = 1; i <= 7; i++) {
listSeaweed.add(addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/seaweed_section_" + i)));
}*/
//used indirectly not via reference
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/grass"));
addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/hail"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud_square"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white16"));
//addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white64"));
//TODO: 1.14 uncomment
/*MeshBufferManagerParticle.cleanup();
MeshBufferManagerFoliage.cleanup();*/
}
public void addSprite(ResourceLocation res) {
atlas(SpriteSourceProvider.PARTICLES_ATLAS).addSource(new SingleFile(res, Optional.empty()));
}
@SubscribeEvent
public static void getRegisteredParticles(TextureStitchEvent.Post event) {
if (!event.getAtlas().location().equals(TextureAtlas.LOCATION_PARTICLES)) {
return;
}
squareGrey = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white"));
//smoke = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/smoke_00"));
//smokeTest = event.addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/smoke_2"));
//cloud = event.addSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud64"));
cloud256 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256"));
cloud256_fire = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_fire"));
//cloud256_test = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_test"));
//cloud256_2 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_5"));
//ground splash
groundSplash = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_6"));
//cloud256_7 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256_7"));
//downfall2 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall2"));
downfall3 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall3"));
//downfall4 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall4"));
if (!Weather.isLoveTropicsInstalled()) {
chicken = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/chicken"));
potato = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/potato"));
}
leaf = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/leaf"));
//rain = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain"));
//test_texture = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/test_texture"));
//white_square = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white_square"));
rain_white = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_white"));
//rain_white_trans = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_white_trans"));
//rain_white_2 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_white_2"));
//rain_10 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/rain_10"));
//rain_vanilla = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/vanilla/rain"));
//snow_vanilla = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/vanilla/snow"));
snow = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/snow"));
snow2 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/snow2"));
//cloud256dark = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud256dark"));
//cloudDownfall = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/downfall"));
tumbleweed = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/tumbleweed"));
debris_1 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/debris_1"));
debris_2 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/debris_2"));
debris_3 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/debris_3"));
/*for (int i = 1; i <= 9; i++) {
listFish.add(event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/fish_" + i)));
}
for (int i = 1; i <= 7; i++) {
listSeaweed.add(event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/seaweed_section_" + i)));
}*/
//used indirectly not via reference
//grass = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/grass"));
hail = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/hail"));
//cloudNew = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud"));
//cloud_square = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/cloud_square"));
//square16 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white16"));
//square64 = event.getAtlas().getSprite(new ResourceLocation(ExtendedRenderer.modid + ":particles/white64"));
//TODO: 1.14 uncomment
/*if (RotatingParticleManager.useShaders) {
RotatingParticleManager.forceShaderReset = true;
}*/
}
/*public static TextureAtlasSprite addSprite(TextureStitchEvent.Pre event, ResourceLocation resourceLocation) {
event.addSprite(resourceLocation);
return event.getAtlas().getSprite(resourceLocation);
}*/
}
================================================
FILE: src/main/java/extendedrenderer/particle/behavior/ParticleBehaviorFog.java
================================================
package extendedrenderer.particle.behavior;
import extendedrenderer.particle.entity.EntityRotFX;
import net.minecraft.world.phys.Vec3;
public class ParticleBehaviorFog extends ParticleBehaviors {
//Externally updated variables, adjusting how templated behavior works
public int curTick = 0;
public int ticksMax = 1;
//TODO: temp, for comparing until done
//public static boolean newCloudWay = false;
public ParticleBehaviorFog(Vec3 source) {
super(source);
}
public EntityRotFX initParticle(EntityRotFX particle) {
super.initParticle(particle);
//particle.particleGravity = 0.5F;
//fog
particle.rotationYaw = rand.nextInt(360);
particle.rotationPitch = rand.nextInt(50)-rand.nextInt(50);
//cloud
particle.rotationYaw = rand.nextInt(360);
particle.rotationPitch = -90+rand.nextInt(50)-rand.nextInt(50);
particle.setMaxAge(650+rand.nextInt(10));
particle.setGravity(0.01F);
float randFloat = (rand.nextFloat() * 0.6F);
float baseBright = 0.7F;
float finalBright = Math.min(1F, baseBright+randFloat);
particle.setColor(finalBright, finalBright, finalBright);
//particle.setColor(72F/255F, 239F/255F, 8F/255F);
//sand
//particle.setColor(204F/255F, 198F/255F, 120F/255F);
//red
//particle.setColor(0.6F + (rand.nextFloat() * 0.4F), 0.2F + (rand.nextFloat() * 0.7F), 0);
//green
//particle.setColor(0, 0.4F + (rand.nextFloat() * 0.4F), 0);
//tealy blue
//particle.setColor(0, 0.4F + (rand.nextFloat() * 0.4F), 0.4F + (rand.nextFloat() * 0.4F));
//particle.setColor(0.4F + (rand.nextFloat() * 0.4F), 0.4F + (rand.nextFloat() * 0.4F), 0.4F + (rand.nextFloat() * 0.4F));
//location based color shift
//particle.setColor((float) (0.4F + (Math.abs(particle.posX / 300D) * 0.6D)), 0.4F, (float) (0.4F + (Math.abs(particle.posZ / 300D) * 0.6D)));
particle.setUseCustomBBForRenderCulling(true);
particle.setScale(0.25F + 0.2F * rand.nextFloat());
particle.brightness = 1F;
particle.setAlphaF(0);
float sizeBase = (float) (500+(rand.nextDouble()*40));
sizeBase *= 0.15F;
particle.setScale(sizeBase);
//particle.spawnY = (float) particle.posY;
//particle.noClip = false;
particle.setCanCollide(true);
//entityfx.spawnAsWeatherEffect();
particle.renderRange = 2048;
return particle;
}
@Override
public void tickUpdateAct(EntityRotFX particle) {
//particle.particleScale = 900;
//particle.rotationPitch = 30;
//for (int i = 0; i < particles.size(); i++) {
//EntityRotFX particle = particles.get(i);
if (!particle.isAlive()) {
particles.remove(particle);
} else {
if (particle.getEntityId() % 2 == 0) {
particle.rotationYaw -= 0.02;
} else {
particle.rotationYaw += 0.02;
}
float ticksFadeInMax = 50;
float ticksFadeOutMax = 50;
if (particle.getAge() < ticksFadeInMax) {
//System.out.println("particle.getAge(): " + particle.getAge());
particle.setAlphaF(particle.getAge() / ticksFadeInMax);
//particle.setAlphaF(1);
} else if (particle.getAge() > particle.getMaxAge() - ticksFadeOutMax) {
float count = particle.getAge() - (particle.getMaxAge() - ticksFadeOutMax);
float val = (ticksFadeOutMax - (count)) / ticksFadeOutMax;
//System.out.println(val);
particle.setAlphaF(val);
} else {
/*if (particle.getAlphaF() > 0) {
particle.setAlphaF(particle.getAlphaF() - rateAlpha*1.3F);
} else {
particle.remove();
}*/
}
double moveSpeed = 0.001D;
//1.10.2 no
/*if (particle.onGround) {
moveSpeed = 0.012D;
particle.setMotionY(particle.getMotionY() + 0.01D);
}*/
//if (particle.isCollidedHorizontally) {
if (particle.isCollided()) {
particle.rotationYaw += 0.1;
}
particle.setMotionX(particle.getMotionX() - Math.sin(Math.toRadians((particle.rotationYaw + particle.getEntityId()) % 360)) * moveSpeed);
particle.setMotionZ(particle.getMotionZ() + Math.cos(Math.toRadians((particle.rotationYaw + particle.getEntityId()) % 360)) * moveSpeed);
double moveSpeedRand = 0.005D;
particle.setMotionX(particle.getMotionX() + (rand.nextDouble() * moveSpeedRand - rand.nextDouble() * moveSpeedRand));
particle.setMotionZ(particle.getMotionZ() + (rand.nextDouble() * moveSpeedRand - rand.nextDouble() * moveSpeedRand));
particle.setScale(particle.getScale() - 0.1F);
if (particle.spawnY != -1) {
particle.setPosition(particle.getPosX(), particle.spawnY, particle.getPosZ());
//particle.posY = particle.spawnY;
}
//particle.remove();
}
//}
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/behavior/ParticleBehaviorSandstorm.java
================================================
package extendedrenderer.particle.behavior;
import com.corosus.coroutil.util.CoroUtilBlock;
import extendedrenderer.particle.entity.EntityRotFX;
import net.minecraft.client.Minecraft;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.core.BlockPos;
import net.minecraft.world.phys.Vec3;
import weather2.ClientTickHandler;
import weather2.ClientWeatherProxy;
import weather2.datatypes.PrecipitationType;
public class ParticleBehaviorSandstorm extends ParticleBehaviors {
//Externally updated variables, adjusting how templated behavior works
public int curTick = 0;
public int ticksMax = 1;
public ParticleBehaviorSandstorm(Vec3 source) {
super(source);
}
public EntityRotFX initParticle(EntityRotFX particle) {
super.initParticle(particle);
//particle.particleGravity = 0.5F;
//fog
particle.rotationYaw = rand.nextInt(360);
particle.rotationPitch = rand.nextInt(50)-rand.nextInt(50);
//cloud
//particle.rotationYaw = rand.nextInt(360);
//particle.rotationPitch = -90+rand.nextInt(50)-rand.nextInt(50);
particle.setLifetime(450+rand.nextInt(10));
float randFloat = (rand.nextFloat() * 0.6F);
float baseBright = 0.7F;
float finalBright = Math.min(1F, baseBright+randFloat);
particle.setColor(finalBright, finalBright, finalBright);
//particle.setColor(72F/255F, 239F/255F, 8F/255F);
//sand
//particle.setColor(204F/255F, 198F/255F, 120F/255F);
//red
//particle.setColor(0.6F + (rand.nextFloat() * 0.4F), 0.2F + (rand.nextFloat() * 0.7F), 0);
//green
//particle.setColor(0, 0.4F + (rand.nextFloat() * 0.4F), 0);
//tealy blue
//particle.setColor(0, 0.4F + (rand.nextFloat() * 0.4F), 0.4F + (rand.nextFloat() * 0.4F));
//particle.setColor(0.4F + (rand.nextFloat() * 0.4F), 0.4F + (rand.nextFloat() * 0.4F), 0.4F + (rand.nextFloat() * 0.4F));
//location based color shift
//particle.setColor((float) (0.4F + (Math.abs(particle.posX / 300D) * 0.6D)), 0.4F, (float) (0.4F + (Math.abs(particle.posZ / 300D) * 0.6D)));
//particle.setScale(0.25F + 0.2F * rand.nextFloat());
particle.brightness = 1F;
particle.setAlpha(1F);
float sizeBase = (float) (30+(rand.nextDouble()*4));
particle.setScale(sizeBase);
//particle.spawnY = (float) particle.posY;
//particle.noClip = false;
particle.setCanCollide(true);
//entityfx.spawnAsWeatherEffect();
particle.renderRange = 2048;
particle.setFacePlayer(true);
particle.setGravity(0.03F);
return particle;
}
@Override
public void tickUpdateAct(EntityRotFX particle) {
//particle.particleScale = 900;
//particle.rotationPitch = 30;
//for (int i = 0; i < particles.size(); i++) {
//EntityRotFX particle = particles.get(i);
if (!particle.isAlive()) {
particles.remove(particle);
} else {
//random rotation yaw adjustment
if (particle.getEntityId() % 2 == 0) {
particle.rotationYaw -= 0.1;
} else {
particle.rotationYaw += 0.1;
}
float ticksFadeInMax = 10;
float ticksFadeOutMax = 10;
//fade in and fade out near age edges
if (particle.getAge() < ticksFadeInMax) {
//System.out.println("particle.getAge(): " + particle.getAge());
particle.setAlpha(Math.min(1F, particle.getAge() / ticksFadeInMax));
//System.out.println(particle.getAge() / ticksFadeInMax);
//particle.setAlphaF(1);
} else if (particle.getAge() > particle.getLifetime() - ticksFadeOutMax) {
float count = particle.getAge() - (particle.getLifetime() - ticksFadeOutMax);
float val = (ticksFadeOutMax - (count)) / ticksFadeOutMax;
//System.out.println(val);
particle.setAlpha(val);
} else {
/*if (particle.getAlphaF() > 0) {
particle.setAlphaF(particle.getAlphaF() - rateAlpha*1.3F);
} else {
particle.remove();
}*/
//particle.setAlphaF(1F);
}
//TEMP
//particle.setAlphaF(1F);
double moveSpeed = 0.001D;
//1.10.2 no
/*if (particle.onGround) {
moveSpeed = 0.012D;
particle.setMotionY(particle.getMotionY() + 0.01D);
}*/
//get pos a bit under particle
BlockPos pos = CoroUtilBlock.blockPos(particle.getPosX(), particle.getPosY() - particle.aboveGroundHeight, particle.getPosZ());
BlockState state = particle.getWorld().getBlockState(pos);
//if particle is near ground, push it up to keep from landing
if (!state.isAir()) {
if (particle.getMotionY() < particle.bounceSpeedMax) {
particle.setMotionY(particle.getMotionY() + particle.bounceSpeed);
}
//check ahead for better flowing over large cliffs
} else {
double aheadMultiplier = 20D;
BlockPos posAhead = CoroUtilBlock.blockPos((particle.getPosX() + (particle.getMotionX() * aheadMultiplier)), particle.getPosY() - particle.aboveGroundHeight, particle.getPosZ() + (particle.getMotionZ() * aheadMultiplier));
BlockState stateAhead = particle.getWorld().getBlockState(posAhead);
if (!stateAhead.isAir()) {
if (particle.getMotionY() < particle.bounceSpeedMaxAhead) {
particle.setMotionY(particle.getMotionY() + particle.bounceSpeedAhead);
}
}
}
//if (particle.isCollidedHorizontally) {
/*if (particle.isCollided()) {
particle.rotationYaw += 0.1;
}*/
/*particle.setMotionX(particle.getMotionX() - Math.sin(Math.toRadians((particle.rotationYaw + particle.getEntityId()) % 360)) * moveSpeed);
particle.setMotionZ(particle.getMotionZ() + Math.cos(Math.toRadians((particle.rotationYaw + particle.getEntityId()) % 360)) * moveSpeed);*/
double moveSpeedRand = 0.005D;
particle.setMotionX(particle.getMotionX() + (rand.nextDouble() * moveSpeedRand - rand.nextDouble() * moveSpeedRand));
particle.setMotionZ(particle.getMotionZ() + (rand.nextDouble() * moveSpeedRand - rand.nextDouble() * moveSpeedRand));
//TEMPOFF?
//particle.setScale(particle.getScale() - 0.1F);
if (particle.spawnY != -1) {
particle.setPos(particle.getPosX(), particle.spawnY, particle.getPosZ());
//particle.posY = particle.spawnY;
}
//particle.remove();
}
//}
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/behavior/ParticleBehaviors.java
================================================
package extendedrenderer.particle.behavior;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.corosus.coroutil.util.CoroUtilBlock;
import com.corosus.coroutil.util.CoroUtilMisc;
import extendedrenderer.particle.entity.EntityRotFX;
import extendedrenderer.particle.entity.ParticleTexExtraRender;
import extendedrenderer.particle.entity.ParticleTexFX;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import weather2.ClientTickHandler;
import weather2.ClientWeatherProxy;
import weather2.client.SceneEnhancer;
import weather2.datatypes.PrecipitationType;
import weather2.util.WeatherUtilParticle;
@OnlyIn(Dist.CLIENT)
public class ParticleBehaviors {
public List<EntityRotFX> particles = new ArrayList<EntityRotFX>();
public Vec3 coordSource;
public Entity sourceEntity = null;
public Random rand = new Random();
//Visual tweaks
public float rateDarken = 0.025F;
public float rateBrighten = 0.010F;
public float rateBrightenSlower = 0.003F;
public float rateAlpha = 0.002F;
public float rateScale = 0.1F;
public int tickSmokifyTrigger = 40;
float acidRainRed = 0.5F;
float acidRainGreen = 1F;
float acidRainBlue = 0.5F;
float vanillaRainRed = 0.7F;
float vanillaRainGreen = 0.7F;
float vanillaRainBlue = 1F;
public ParticleBehaviors(Vec3 source) {
coordSource = source;
}
public void tickUpdateList() { //shouldnt be used, particles tick their own method, who removes it though?
for (int i = 0; i < particles.size(); i++) {
EntityRotFX particle = particles.get(i);
if (!particle.isAlive()) {
particles.remove(particle);
} else {
tickUpdate(particle);
}
}
}
public void tickUpdate(EntityRotFX particle) {
if (sourceEntity != null) {
coordSource = sourceEntity.position();
}
tickUpdateAct(particle);
}
//default is smoke effect, override for custom
public void tickUpdateAct(EntityRotFX particle) {
double centerX = particle.getPosX();
//double centerY = particle.posY;
double centerZ = particle.getPosZ();
if (coordSource != null) {
centerX = coordSource.x/* + 0.5D*/;
//centerY = coordSource.yCoord/* + 0.5D*/;
centerZ = coordSource.z/* + 0.5D*/;
}
double vecX = centerX - particle.getPosX();
double vecZ = centerZ - particle.getPosZ();
double distToCenter = Math.sqrt(vecX * vecX + vecZ * vecZ);
double rotYaw = (float)(Math.atan2(vecZ, vecX) * 180.0D / Math.PI);
double adjYaw = Math.min(360, 45+particle.getAge());
rotYaw -= adjYaw;
//rotYaw -= 90D;
//rotYaw += 20D;
double speed = 0.1D;
if (particle.getAge() < 25 && distToCenter > 0.05D) {
particle.setMotionX(Math.cos(rotYaw * 0.017453D) * speed);
particle.setMotionZ(Math.sin(rotYaw * 0.017453D) * speed);
} else {
double speed2 = 0.008D;
double pSpeed = Math.sqrt(particle.getMotionX() * particle.getMotionX() + particle.getMotionZ() * particle.getMotionZ());
//cheap air search code
if (pSpeed < 0.2 && particle.getMotionY() < 0.01) {
speed2 = 0.08D;
}
if (pSpeed < 0.002 && Math.abs(particle.getMotionY()) < 0.02) {
particle.setMotionY(particle.getMotionY() - 0.15D);
}
particle.setMotionX(particle.getMotionX() + (rand.nextDouble() - rand.nextDouble()) * speed2);
particle.setMotionZ(particle.getMotionZ() + (rand.nextDouble() - rand.nextDouble()) * speed2);
}
float brightnessShiftRate = rateDarken;
int stateChangeTick = tickSmokifyTrigger;
if (particle.getAge() < stateChangeTick) {
particle.setGravity(-0.2F);
particle.setColor(particle.rCol - brightnessShiftRate, particle.gCol - brightnessShiftRate, particle.bCol - brightnessShiftRate);
} else if (particle.getAge() == stateChangeTick) {
particle.setColor(0,0,0);
} else {
brightnessShiftRate = rateBrighten;
particle.setGravity(-0.05F);
//particle.motionY *= 0.99F;
if (particle.rCol < 0.3F) {
} else {
brightnessShiftRate = rateBrightenSlower;
}
particle.setColor(particle.rCol + brightnessShiftRate, particle.gCol + brightnessShiftRate, particle.bCol + brightnessShiftRate);
if (particle.getAlphaF() > 0) {
particle.setAlpha(particle.getAlphaF() - rateAlpha);
} else {
particle.remove();
}
}
if (particle.getScale() < 8F) particle.setScale(particle.getScale() + rateScale);
/*if (particle.getAge() % cycle < cycle/2) {
particle.setGravity(-0.02F);
} else {*/
//}
}
public void tickUpdateCloud(EntityRotFX particle) {
particle.rotationYaw -= 0.1;
int ticksFadeInMax = 100;
if (particle.getAge() < ticksFadeInMax) {
//System.out.println("particle.getAge(): " + particle.getAge());
particle.setAlpha(particle.getAge() * 0.01F);
} else {
if (particle.getAlphaF() > 0) {
particle.setAlpha(particle.getAlphaF() - rateAlpha*1.3F);
} else {
particle.remove();
}
}
}
public EntityRotFX spawnNewParticleIconFX(Level world, TextureAtlasSprite icon, double x, double y, double z, double vecX, double vecY, double vecZ) {
return spawnNewParticleIconFX(world, icon, x, y, z, vecX, vecY, vecZ, 0);
}
public EntityRotFX spawnNewParticleIconFX(Level world, TextureAtlasSprite icon, double x, double y, double z, double vecX, double vecY, double vecZ, int renderOrder) {
EntityRotFX entityfx = new ParticleTexFX((ClientLevel) world, x, y, z, vecX, vecY, vecZ, icon);
entityfx.pb = this;
entityfx.renderOrder = renderOrder;
return entityfx;
}
public EntityRotFX initParticle(EntityRotFX particle) {
particle.setPrevPosX(particle.getPosX());
particle.setPrevPosY(particle.getPosY());
particle.setPrevPosZ(particle.getPosZ());
/*particle.prevPosX = particle.getPosX();
particle.prevPosY = particle.getPosY();
particle.prevPosZ = particle.getPosZ();*/
//keep AABB small, very important to performance
particle.setSize(0.01F, 0.01F);
return particle;
}
public void initParticleRain(EntityRotFX particle, int extraRenderCount) {
particle.setKillWhenUnderTopmostBlock(true);
particle.setCanCollide(false);
particle.killWhenUnderCameraAtLeast = 5;
particle.setDontRenderUnderTopmostBlock(true);
if (particle instanceof ParticleTexExtraRender) {
((ParticleTexExtraRender)particle).setExtraParticlesBaseAmount(extraRenderCount);
}
particle.fastLight = true;
particle.setSlantParticleToWind(true);
particle.windWeight = 5F;
particle.setFacePlayer(false);
particle.setScale(2F * 0.15F);
particle.isTransparent = true;
particle.setGravity(1.8F);
particle.setLifetime(50);
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(3);
particle.setFullAlphaTarget(0.6F);
particle.setAlpha(0);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
particle.setMotionY(-0.5D);
ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 10F, 0.5F);
Player entP = Minecraft.getInstance().player;
Biome biome = entP.level().getBiome(new BlockPos(Mth.floor(entP.getX()), (int)Math.floor(entP.getY()), Mth.floor(entP.getZ()))).value();
if (ClientWeatherProxy.get().getPrecipitationType(biome) == PrecipitationType.ACID) {
particle.rCol = acidRainRed;
particle.gCol = acidRainGreen;
particle.bCol = acidRainBlue;
} else {
particle.setFullAlphaTarget(0.8F);
particle.rCol = vanillaRainRed;
particle.gCol = vanillaRainGreen;
particle.bCol = vanillaRainBlue;
}
particle.spawnAsWeatherEffect();
}
public void initParticleGroundSplash(EntityRotFX particle) {
particle.setKillWhenUnderTopmostBlock(true);
particle.setCanCollide(false);
particle.killWhenUnderCameraAtLeast = 5;
boolean upward = rand.nextBoolean();
particle.windWeight = 20F;
particle.setFacePlayer(upward);
particle.setScale(0.2F + (rand.nextFloat() * 0.05F));
particle.setLifetime(15);
particle.setGravity(-0.0F);
particle.setTicksFadeInMax(3);
particle.setFullAlphaTarget(0.6F);
particle.setAlpha(0);
particle.setTicksFadeOutMax(4);
particle.renderOrder = 2;
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
particle.rotationPitch = 90;
particle.setMotionY(0D);
particle.setMotionX((rand.nextFloat() - 0.5F) * 0.01F);
particle.setMotionZ((rand.nextFloat() - 0.5F) * 0.01F);
//ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 1F / 5F, 0.5F);
Player entP = Minecraft.getInstance().player;
Biome biome = entP.level().getBiome(new BlockPos(Mth.floor(entP.getX()), Mth.floor(entP.getY()), Mth.floor(entP.getZ()))).value();
if (ClientWeatherProxy.get().getPrecipitationType(biome) == PrecipitationType.ACID) {
particle.rCol = acidRainRed;
particle.gCol = acidRainGreen;
particle.bCol = acidRainBlue;
} else {
particle.rCol = vanillaRainRed;
particle.gCol = vanillaRainGreen;
particle.bCol = vanillaRainBlue;
}
}
public void initParticleRainDownfall(EntityRotFX particle) {
particle.setCanCollide(false);
particle.killWhenUnderCameraAtLeast = 15;
particle.setKillWhenUnderTopmostBlock(true);
particle.setKillWhenUnderTopmostBlock_ScanAheadRange(3);
particle.setTicksFadeOutMaxOnDeath(10);
particle.setDontRenderUnderTopmostBlock(false);
particle.windWeight = 5F;
particle.setFacePlayer(false);
particle.facePlayerYaw = true;
particle.setScale(12F + (rand.nextFloat() * 0.3F));
particle.setSize(10, 50);
particle.setLifetime(120);
particle.setGravity(0.35F);
particle.setTicksFadeInMax(20);
particle.setFullAlphaTarget(1F);
particle.setAlpha(0);
particle.setTicksFadeOutMax(10);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
particle.rotationPitch = 0;
particle.setMotionY(-0.3D);
particle.setMotionX((rand.nextFloat() - 0.5F) * 0.01F);
particle.setMotionZ((rand.nextFloat() - 0.5F) * 0.01F);
Player entP = Minecraft.getInstance().player;
Biome biome = entP.level().getBiome(CoroUtilBlock.blockPos(entP.getX(), entP.getY(), entP.getZ())).get();
if (ClientWeatherProxy.get().getPrecipitationType(biome) == PrecipitationType.ACID) {
particle.rCol = acidRainRed;
particle.gCol = acidRainGreen;
particle.bCol = acidRainBlue;
} else {
particle.rCol = vanillaRainRed;
particle.gCol = vanillaRainGreen;
particle.bCol = vanillaRainBlue;
}
}
public void initParticleSnow(EntityRotFX particle, int extraRenderCount, float windSpeed) {
float windScale = Math.max(0.1F, 1F - windSpeed);
particle.setCanCollide(false);
//particle.setKillWhenUnderTopmostBlock(true);
particle.setTicksFadeOutMaxOnDeath(5);
particle.setDontRenderUnderTopmostBlock(true);
particle.setKillWhenUnderTopmostBlock(true);
if (particle instanceof ParticleTexExtraRender) {
((ParticleTexExtraRender)particle).setExtraParticlesBaseAmount(extraRenderCount);
}
particle.killWhenFarFromCameraAtLeast = 25;
particle.setMotionX(0);
particle.setMotionZ(0);
particle.setMotionY(0);
particle.setScale(1.3F * 0.15F);
particle.setGravity(0.05F);
particle.windWeight = 5F;
particle.setMaxAge((int) (120F * 12F * windScale));
particle.setFacePlayer(true);
particle.setTicksFadeInMax(40 * windScale);
particle.setAlphaF(0);
particle.setTicksFadeOutMax(40 * windScale);
particle.setTicksFadeOutMaxOnDeath(10);
//particle.setTicksFadeOutMax(5);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 1F, 0.5F);
}
public void initParticleSnowstorm(EntityRotFX particle, int extraRenderCount) {
particle.setCanCollide(false);
//particle.setKillWhenUnderTopmostBlock(true);
particle.setTicksFadeOutMaxOnDeath(5);
particle.setDontRenderUnderTopmostBlock(true);
if (particle instanceof ParticleTexExtraRender) {
((ParticleTexExtraRender)particle).setExtraParticlesBaseAmount(extraRenderCount);
}
particle.killWhenFarFromCameraAtLeast = 15;
particle.setMotionX(0);
particle.setMotionZ(0);
particle.setMotionY(0D);
particle.setScale(1.3F * 0.15F);
particle.setGravity(0.05F);
particle.windWeight = 5F;
particle.setMaxAge(120);
particle.setFacePlayer(false);
particle.setTicksFadeInMax(5);
particle.setAlphaF(0);
particle.setTicksFadeOutMax(20);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 1F, 0.5F);
}
public void initParticleHail(EntityRotFX particle) {
particle.setKillWhenUnderTopmostBlock(false);
particle.setCanCollide(true);
particle.setKillOnCollide(true);
particle.killWhenUnderCameraAtLeast = 5;
particle.setDontRenderUnderTopmostBlock(true);
particle.rotationYaw = rand.nextInt(360);
particle.rotationPitch = rand.nextInt(360);
particle.fastLight = true;
particle.setSlantParticleToWind(true);
particle.windWeight = 5F;
particle.spinFast = true;
particle.spinFastRate = 10F;
particle.setFacePlayer(false);
particle.setScale(0.7F * 0.15F);
//particle.setScale(2F * 0.15F);
particle.isTransparent = true;
particle.setGravity(3.5F);
particle.setLifetime(70);
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(50);
particle.setFullAlphaTarget(1F);
particle.setAlpha(0);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
particle.setMotionY(-0.5D);
ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 1F, 0.5F);
particle.rCol = 0.9F;
particle.gCol = 0.9F;
particle.bCol = 0.9F;
particle.bounceOnVerticalImpact = true;
particle.bounceOnVerticalImpactEnergy = 0.2F;
}
public void initParticleCube(EntityRotFX particle) {
particle.setKillWhenUnderTopmostBlock(false);
particle.setCanCollide(true);
particle.setKillOnCollide(true);
particle.setKillOnCollideActivateAtAge(30);
particle.killWhenUnderCameraAtLeast = 0;
particle.setDontRenderUnderTopmostBlock(true);
particle.rotationYaw = rand.nextInt(360);
particle.rotationPitch = rand.nextInt(360);
particle.fastLight = true;
particle.windWeight = 5 + ((float)((Math.random() * 0.3) - (Math.random() * 0.3)));
particle.spinFast = true;
particle.spinFastRate = 1F;
particle.setFacePlayer(false);
particle.setScale(3F * 0.15F);
particle.isTransparent = false;
particle.setGravity(4F);
particle.setLifetime(20*20);
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(20);
particle.setFullAlphaTarget(1F);
particle.setAlpha(0);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
//particle.setMotionY(-0.5D);
//ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 1F, 0.5F);
/*float tempBrightness = 0.5F;
particle.rCol = 0.5F * tempBrightness;
particle.gCol = 0.9F * tempBrightness;
particle.bCol = 0.5F * tempBrightness;*/
particle.setVanillaMotionDampen(true);
particle.bounceOnVerticalImpact = true;
particle.bounceOnVerticalImpactEnergy = 0.2F;
}
public void initParticleDustAir(EntityRotFX particle) {
particle.setKillWhenUnderTopmostBlock(false);
particle.setCanCollide(false);
particle.killWhenUnderCameraAtLeast = 5;
particle.setTicksFadeOutMaxOnDeath(5);
particle.setDontRenderUnderTopmostBlock(true);
if (particle instanceof ParticleTexExtraRender) {
((ParticleTexExtraRender)particle).setExtraParticlesBaseAmount(0);
}
particle.setMotionX(0);
particle.setMotionZ(0);
particle.setMotionY(0);
particle.fastLight = true;
particle.windWeight = 10F;
particle.setFacePlayer(true);
particle.setScale(0.1F * 0.15F);
particle.isTransparent = true;
particle.setGravity(0F);
particle.setLifetime(80);
particle.setTicksFadeInMax(20);
particle.setTicksFadeOutMax(20);
particle.setTicksFadeOutMaxOnDeath(20);
particle.setFullAlphaTarget(0.6F);
particle.setAlpha(0);
float brightness = 0.5F + (rand.nextFloat() * 0.5F);
particle.setColor(particle.rCol * brightness, particle.gCol * brightness, particle.bCol * brightness);
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
//ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 10F, 0.5F);
}
public void initParticleDustGround(EntityRotFX particle, boolean spawnInside, boolean spawnAboveSnow) {
particle.setKillOnCollide(false);
particle.setKillWhenUnderTopmostBlock(false);
particle.killWhenUnderCameraAtLeast = 5;
particle.setDontRenderUnderTopmostBlock(false);
particle.setMotionX(0);
particle.setMotionZ(0);
particle.setMotionY(0);
particle.fastLight = true;
particle.windWeight = 1F;
particle.setFacePlayer(true);
particle.setScale(0.15F * 0.15F);
particle.isTransparent = true;
particle.setGravity(0.06F);
particle.setCanCollide(false);
particle.setCanCollide(true);
particle.collisionSpeedDampen = false;
/*if (spawnInside) {
particle.setGravity(0.05F);
particle.setCanCollide(true);
}*/
particle.setLifetime(30);
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(5);
particle.setFullAlphaTarget(0.6F);
particle.setAlpha(0);
if (spawnAboveSnow || !spawnInside) {
float brightness = 0.5F;
particle.setColor(particle.rCol * brightness, particle.gCol * brightness, particle.bCol * brightness);
}
particle.rotationYaw = CoroUtilMisc.random.nextInt(360) - 180F;
}
public void initParticleLeaf(EntityRotFX particle, float particleAABB) {
Vec3 windForce = ClientTickHandler.getClientWeather().getWindManager().getWindForce(WeatherUtilParticle.getPos(particle));
particle.setMotionX(windForce.x / 2);
particle.setMotionZ(windForce.z / 2);
particle.setMotionY(windForce.y / 2);
particle.setSize(particleAABB, particleAABB);
particle.setGravity(0.05F);
particle.setCanCollide(true);
particle.setKillOnCollide(false);
particle.collisionSpeedDampen = false;
particle.killWhenUnderCameraAtLeast = 20;
particle.killWhenFarFromCameraAtLeast = 20;
particle.isTransparent = false;
particle.rotationYaw = rand.nextInt(360);
particle.rotationPitch = rand.nextInt(360);
}
public void initParticleSnowstormCloudDust(EntityRotFX particle) {
boolean farSpawn = Minecraft.getInstance().player.isSpectator() || !SceneEnhancer.isPlayerOutside;
Vec3 windForce = ClientTickHandler.getClientWeather().getWindManager().getWindForce(null);
particle.setMotionX(windForce.x * 0.3);
particle.setMotionZ(windForce.z * 0.3);
particle.setFacePlayer(false);
particle.isTransparent = true;
particle.rotationYaw = (float)rand.nextInt(360);
particle.rotationPitch = (float)rand.nextInt(360);
particle.setLifetime(farSpawn ? 30 : 10);
particle.setLifetime(20);
particle.setGravity(0.09F);
particle.setAlpha(0F);
float brightnessMulti = 1F - (rand.nextFloat() * 0.4F);
particle.setColor(1F * brightnessMulti, 1F * brightnessMulti, 1F * brightnessMulti);
particle.setScale(30 * 0.15F);
particle.aboveGroundHeight = 0.2D;
particle.setKillOnCollide(true);
particle.killWhenFarFromCameraAtLeast = 15;
particle.windWeight = 1F;
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(3);
particle.setTicksFadeOutMaxOnDeath(3);
ClientTickHandler.getClientWeather().getWindManager().applyWindForceNew(particle, 1F / 5F, 0.5F);
}
public void initParticleSandstormDust(EntityRotFX particle) {
Vec3 windForce = ClientTickHandler.getClientWeather().getWindManager().getWindForce(null);
particle.setMotionX(windForce.x);
particle.setMotionZ(windForce.z);
particle.setFacePlayer(false);
particle.isTransparent = true;
particle.rotationYaw = (float)rand.nextInt(360);
particle.rotationPitch = (float)rand.nextInt(360);
particle.setLifetime(40);
particle.setGravity(0.09F);
particle.setAlpha(0F);
float brightnessMulti = 1F - (rand.nextFloat() * 0.5F);
particle.setColor(0.65F * brightnessMulti, 0.6F * brightnessMulti, 0.3F * brightnessMulti);
particle.setScale(40 * 0.15F);
particle.aboveGroundHeight = 0.2D;
particle.setKillOnCollide(true);
particle.killWhenFarFromCameraAtLeast = 15;
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(5);
particle.windWeight = 1F;
}
public void initParticleSandstormTumbleweed(EntityRotFX particle) {
Vec3 windForce = ClientTickHandler.getClientWeather().getWindManager().getWindForce(null);
particle.setMotionX(windForce.x);
particle.setMotionZ(windForce.z);
particle.setFacePlayer(false);
particle.facePlayerYaw = false;
particle.spinTowardsMotionDirection = true;
particle.isTransparent = true;
particle.rotationYaw = (float)rand.nextInt(360);
particle.rotationPitch = (float)rand.nextInt(360);
particle.setLifetime(80);
particle.setGravity(0.3F);
particle.setAlpha(0F);
float brightnessMulti = 1F - (rand.nextFloat() * 0.2F);
particle.setColor(1F * brightnessMulti, 1F * brightnessMulti, 1F * brightnessMulti);
particle.setScale(8 * 0.15F);
particle.aboveGroundHeight = 0.5D;
particle.collisionSpeedDampen = false;
particle.bounceSpeed = 0.03D;
particle.bounceSpeedAhead = 0.03D;
particle.setKillOnCollide(false);
particle.killWhenFarFromCameraAtLeast = 30;
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(5);
particle.windWeight = 1F;
}
public void initParticleSandstormDebris(EntityRotFX particle) {
Vec3 windForce = ClientTickHandler.getClientWeather().getWindManager().getWindForce(null);
particle.setMotionX(windForce.x);
particle.setMotionZ(windForce.z);
particle.setFacePlayer(false);
particle.spinFast = true;
particle.spinFastRate = 2F;
particle.isTransparent = true;
particle.rotationYaw = (float)rand.nextInt(360);
particle.rotationPitch = (float)rand.nextInt(360);
particle.setLifetime(80);
particle.setGravity(0.3F);
particle.setAlpha(0F);
float brightnessMulti = 1F - (rand.nextFloat() * 0.5F);
particle.setColor(1F * brightnessMulti, 1F * brightnessMulti, 1F * brightnessMulti);
particle.setScale(8 * 0.15F);
particle.aboveGroundHeight = 0.5D;
particle.collisionSpeedDampen = false;
particle.bounceSpeed = 0.03D;
particle.bounceSpeedAhead = 0.03D;
particle.setKillOnCollide(false);
particle.killWhenFarFromCameraAtLeast = 30;
particle.setTicksFadeInMax(5);
particle.setTicksFadeOutMax(5);
particle.setTicksFadeOutMaxOnDeath(5);
particle.windWeight = 1F;
}
public static EntityRotFX setParticleRandoms(EntityRotFX particle, boolean yaw, boolean pitch) {
Random rand = new Random();
if (yaw) particle.rotationYaw = rand.nextInt(360);
if (pitch) particle.rotationPitch = rand.nextInt(360);
return particle;
}
public static EntityRotFX setParticleFire(EntityRotFX particle) {
Random rand = new Random();
particle.setColor(0.6F + (rand.nextFloat() * 0.4F), 0.2F + (rand.nextFloat() * 0.2F), 0);
particle.setScale(0.25F + 0.2F * rand.nextFloat());
particle.brightness = 1F;
particle.setSize(0.1F, 0.1F);
particle.setAlpha(0.6F);
return particle;
}
public static EntityRotFX setParticleCloud(EntityRotFX particle, float freezeY) {
particle.spawnY = freezeY;
particle.rotationPitch = 90F;
//particle.renderDistanceWeight = 999D;
//1.10.2 no known replacement for above
//particle.noClip = true;
particle.setCanCollide(false);
particle.setSize(0.25F, 0.25F);
particle.setScale(500F);
//particle.particleScale = 200F;
particle.callUpdateSuper = false;
particle.callUpdatePB = false;
particle.setLifetime(500);
particle.setColor(1F, 1F, 1F);
particle.brightness = 0.3F;//- ((200F - particle.spawnY) * 0.05F);
particle.renderRange = 999F;
particle.setAlpha(0F);
return particle;
}
public void cleanup() {
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/entity/DustEmitter.java
================================================
package extendedrenderer.particle.entity;
import extendedrenderer.particle.ParticleRegistry;
import net.minecraft.client.multiplayer.ClientLevel;
import weather2.client.SceneEnhancer;
public class DustEmitter extends ParticleEmitter {
public DustEmitter(ClientLevel par1World, double par2, double par4, double par6, double par8, double par10, double par12) {
super(par1World, par2, par4, par6, par8, par10, par12);
}
@Override
public void tick() {
super.tick();
ParticleTexExtraRender dust = new ParticleTexExtraRender(level,
x,
y,
z,
0D, 0D, 0D, ParticleRegistry.squareGrey);
SceneEnhancer.particleBehavior.initParticleDustAir(dust);
dust.spawnAsWeatherEffect();
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/entity/EntityRotFX.java
================================================
package extendedrenderer.particle.entity;
import com.corosus.coroutil.util.CoroUtilBlock;
import com.corosus.coroutil.util.CoroUtilMisc;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*;
import com.mojang.math.Axis;
import extendedrenderer.particle.behavior.ParticleBehaviors;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.ParticleRenderType;
import net.minecraft.client.particle.TextureSheetParticle;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import weather2.ClientTickHandler;
import weather2.IWindHandler;
import weather2.config.ConfigParticle;
import weather2.weathersystem.WeatherManagerClient;
import weather2.weathersystem.wind.WindManager;
import java.util.List;
import java.util.stream.Stream;
@OnlyIn(Dist.CLIENT)
public class EntityRotFX extends TextureSheetParticle implements IWindHandler
{
public static final ParticleRenderType SORTED_TRANSLUCENT = new ParticleRenderType() {
@Override
public void begin(BufferBuilder p_217600_1_, TextureManager p_217600_2_) {
RenderSystem.disableCull();
ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT.begin(p_217600_1_, p_217600_2_);
}
@Override
public void end(Tesselator p_217599_1_) {
//TODO: not possible in 1.20 now i guess, cant remember why this line was important
//p_217599_1_.getBuilder().setQuadSortOrigin(0, 0, 0);
ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT.end(p_217599_1_);
}
@Override
public String toString() {
return "PARTICLE_SHEET_SORTED_TRANSLUCENT";
}
};
public static final ParticleRenderType SORTED_OPAQUE_BLOCK = new ParticleRenderType() {
@Override
public void begin(BufferBuilder p_217600_1_, TextureManager p_217600_2_) {
RenderSystem.disableBlend();
RenderSystem.depthMask(true);
RenderSystem.setShader(GameRenderer::getParticleShader);
RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS);
p_217600_1_.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE);
}
@Override
public void end(Tesselator p_217599_1_) {
//TODO: not possible in 1.20 now i guess, cant remember why this line was important
//p_217599_1_.getBuilder().setQuadSortOrigin(0, 0, 0);
ParticleRenderType.PARTICLE_SHEET_OPAQUE.end(p_217599_1_);
}
@Override
public String toString() {
return "PARTICLE_BLOCK_SHEET_SORTED_OPAQUE";
}
};
public boolean weatherEffect = false;
public float spawnY = -1;
//this field and 2 methods below are for backwards compatibility with old particle system from the new icon based system
public int particleTextureIndexInt = 0;
public float brightness = 0.7F;
public boolean callUpdateSuper = true;
public boolean callUpdatePB = true;
public float renderRange = 128F;
//used in RotatingEffectRenderer to assist in solving some transparency ordering issues, eg, tornado funnel before clouds
public int renderOrder = 0;
//not a real entity ID now, just used for making rendering of entities slightly unique
private int entityID = 0;
public int debugID = 0;
public float prevRotationYaw;
public float rotationYaw;
public float prevRotationPitch;
public float rotationPitch;
public float windWeight = 5;
public boolean isTransparent = true;
public boolean killOnCollide = false;
public int killOnCollideActivateAtAge = 0;
public boolean facePlayer = false;
//facePlayer will override this
public boolean facePlayerYaw = false;
public boolean vanillaMotionDampen = true;
//for particle behaviors
public double aboveGroundHeight = 4.5D;
public boolean checkAheadToBounce = true;
public boolean collisionSpeedDampen = true;
public double bounceSpeed = 0.05D;
public double bounceSpeedMax = 0.15D;
public double bounceSpeedAhead = 0.35D;
public double bounceSpeedMaxAhead = 0.25D;
public boolean bounceOnVerticalImpact = false;
public double bounceOnVerticalImpactEnergy = 0.3F;
public boolean spinFast = false;
public float spinFastRate = 10F;
public boolean spinTowardsMotionDirection = false;
private float ticksFadeInMax = 0;
private float ticksFadeOutMax = 0;
private float fullAlphaTarget = 1F;
private boolean dontRenderUnderTopmostBlock = false;
private boolean killWhenUnderTopmostBlock = false;
private int killWhenUnderTopmostBlock_ScanAheadRange = 0;
public int killWhenUnderCameraAtLeast = 0;
public int killWhenFarFromCameraAtLeast = 0;
private float ticksFadeOutMaxOnDeath = -1;
private float ticksFadeOutCurOnDeath = 0;
protected boolean fadingOut = false;
public float avoidTerrainAngle = 0;
//this is for yaw only
public boolean useRotationAroundCenter = false;
public float rotationAroundCenter = 0;
public float rotationAroundCenterPrev = 0;
public float rotationSpeedAroundCenter = 0;
public float rotationDistAroundCenter = 0;
private boolean slantParticleToWind = false;
/*public Quaternion rotation;
public Quaternion rotationPrev;*/
//set to true for direct quaternion control, not EULER conversion helper
public boolean quatControl = false;
public boolean fastLight = false;
public float brightnessCache = 0.5F;
public boolean rotateOrderXY = false;
public float extraYRotation = 0;
public boolean markCollided = false;
public boolean isCollidedHorizontally = false;
public boolean isCollidedVerticallyDownwards = false;
public boolean isCollidedVerticallyUpwards = false;
//used for translational rotation around a point
public Vector3f rotationAround = new Vector3f();
//workaround for particles that are fading out while partially in the ground, keeps them rendering at previous brightness instead of 0
protected int lastNonZeroBrightness = 15728640;
public ParticleBehaviors pb = null; //designed to be a reference to the central objects particle behavior
//workaround for avoiding using vanilla bb which causes huge performance issues for large sizes
private boolean useCustomBBForRenderCulling = false;
private static final AABB INITIAL_AABB = new AABB(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D);
private AABB bbRender = INITIAL_AABB;
private float renderDistanceCull = -1;
private boolean useDynamicWindSpeed = true;
public EntityRotFX(ClientLevel par1World, double par2, double par4, double par6, double par8, double par10, double par12)
{
super(par1World, par2, par4, par6, par8, par10, par12);
setSize(0.3F, 0.3F);
//this.isImmuneToFire = true;
//this.setMaxAge(100);
this.entityID = CoroUtilMisc.random.nextInt(100000);
//rotation = new Quaternion();
//TODO: 1.14 uncomment for shaders
//brightnessCache = CoroUtilBlockLightCache.getBrightnessCached(world, (float)posX, (float)posY, (float)posZ);
}
public boolean isSlantParticleToWind() {
return slantParticleToWind;
}
public void setSlantParticleToWind(boolean slantParticleToWind) {
this.slantParticleToWind = slantParticleToWind;
}
public float getTicksFadeOutMaxOnDeath() {
return ticksFadeOutMaxOnDeath;
}
public void setTicksFadeOutMaxOnDeath(float ticksFadeOutMaxOnDeath) {
this.ticksFadeOutMaxOnDeath = ticksFadeOutMaxOnDeath;
}
public boolean isKillWhenUnderTopmostBlock() {
return killWhenUnderTopmostBlock;
}
public void setKillWhenUnderTopmostBlock(boolean killWhenUnderTopmostBlock) {
this.killWhenUnderTopmostBlock = killWhenUnderTopmostBlock;
}
public boolean isDontRenderUnderTopmostBlock() {
return dontRenderUnderTopmostBlock;
}
public void setDontRenderUnderTopmostBlock(boolean dontRenderUnderTopmostBlock) {
this.dontRenderUnderTopmostBlock = dontRenderUnderTopmostBlock;
}
public float getTicksFadeInMax() {
return ticksFadeInMax;
}
public void setTicksFadeInMax(float ticksFadeInMax) {
this.ticksFadeInMax = ticksFadeInMax;
}
public float getTicksFadeOutMax() {
return ticksFadeOutMax;
}
public void setTicksFadeOutMax(float ticksFadeOutMax) {
this.ticksFadeOutMax = ticksFadeOutMax;
}
public int getParticleTextureIndex()
{
return this.particleTextureIndexInt;
}
public void setLifetime(int par) {
lifetime = par;
}
public float getAlphaF()
{
return this.alpha;
}
@Override
public void remove() {
if (pb != null) pb.particles.remove(this);
super.remove();
}
@Override
public void tick() {
super.tick();
this.prevRotationPitch = this.rotationPitch;
if (!(this instanceof PivotingParticle)) {
this.prevRotationYaw = this.rotationYaw;
}
Entity ent = Minecraft.getInstance().getCameraEntity();
//if (this.entityID % 400 == 0) System.out.println("tick time: " + this.worldObj.getGameTime());
if (!isVanillaMotionDampen()) {
//cancel motion dampening (which is basically air resistance)
//keep this up to date with the inverse of whatever Particle.tick uses
this.xd /= 0.9800000190734863D;
this.yd /= 0.9800000190734863D;
this.zd /= 0.9800000190734863D;
}
if (!this.removed && !fadingOut) {
if (killOnCollide && (killOnCollideActivateAtAge == 0 || age >= killOnCollideActivateAtAge)) {
if (this.isCollided()) {
startDeath();
}
}
BlockPos pos = CoroUtilBlock.blockPos(this.x, this.y, this.z);
if (killWhenUnderTopmostBlock) {
//int height = this.world.getPrecipitationHeight(new BlockPos(this.posX, this.posY, this.posZ)).getY();
int height = level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos).getY();
if (this.y - killWhenUnderTopmostBlock_ScanAheadRange <= height) {
startDeath();
}
}
//case: when on high pillar and rain is falling far below you, start killing it / fading it out
if (killWhenUnderCameraAtLeast != 0) {
if (this.y < ent.getY() - killWhenUnderCameraAtLeast) {
startDeath();
}
}
if (killWhenFarFromCameraAtLeast != 0) {
if (getAge() > 20 && getAge() % 5 == 0) {
if (ent.distanceToSqr(this.x, this.y, this.z) > killWhenFarFromCameraAtLeast * killWhenFarFromCameraAtLeast) {
//System.out.println("far kill");
startDeath();
}
}
}
}
if (!collisionSpeedDampen) {
//if (this.isCollided()) {
if (this.onGround) {
this.xd /= 0.699999988079071D;
this.zd /= 0.699999988079071D;
}
}
double speedXZ = Math.sqrt(getMotionX() * getMotionX() + /*getMotionY() * getMotionY() + */getMotionZ() * getMotionZ());
double spinFastRateAdj = spinFastRate * speedXZ * 10F;
//spinFastRateAdj = 0;
if (spinFast) {
this.rotationPitch += this.entityID % 2 == 0 ? spinFastRateAdj : -spinFastRateAdj;
this.rotationYaw += this.entityID % 2 == 0 ? -spinFastRateAdj : spinFastRateAdj;
}
float angleToMovement = (float) (Math.toDegrees(Math.atan2(xd, zd)));
if (spinTowardsMotionDirection) {
this.rotationYaw = angleToMovement;
this.rotationPitch += spinFastRate;
}
if (!fadingOut) {
if (ticksFadeInMax > 0 && this.getAge() < ticksFadeInMax) {
//System.out.println("this.getAge() / ticksFadeInMax: " + this.getAge() / ticksFadeInMax);
this.setAlpha((float)this.getAge() / ticksFadeInMax * getFullAlphaTarget());
//this.setAlphaF(0.15F);
} else if (ticksFadeOutMax > 0 && this.getAge() > this.getLifetime() - ticksFadeOutMax) {
float count = this.getAge() - (this.getLifetime() - ticksFadeOutMax);
float val = (ticksFadeOutMax - (count)) / ticksFadeOutMax;
//System.out.println(val);
this.setAlpha(val * getFullAlphaTarget());
//make sure fully visible otherwise
} else if (ticksFadeInMax > 0 || ticksFadeOutMax > 0) {
this.setAlpha(getFullAlphaTarget());
}
} else {
if (ticksFadeOutCurOnDeath < ticksFadeOutMaxOnDeath) {
ticksFadeOutCurOnDeath++;
} else {
this.remove();
}
float val = 1F - (ticksFadeOutCurOnDeath / ticksFadeOutMaxOnDeath);
//System.out.println(val);
this.setAlpha(val * getFullAlphaTarget());
}
if (level.getGameTime() % 5 == 0) {
//TODO: 1.14 uncomment
//brightnessCache = CoroUtilBlockLightCache.getBrightnessCached(world, (float)posX, (float)posY, (float)posZ);
}
rotationAroundCenter += rotationSpeedAroundCenter;
rotationAroundCenter %= 360;
/*while (rotationAroundCenter >= 360) {
System.out.println(rotationAroundCenter);
rotationAroundCenter -= 360;
}*/
tickExtraRotations();
}
public void tickExtraRotations() {
if (slantParticleToWind) {
double motionXZ = Math.sqrt(xd * xd + zd * zd);
rotationPitch = (float)Math.atan2(yd, motionXZ);
}
WeatherManagerClient weatherMan = ClientTickHandler.weatherManager;
if (weatherMan == null) return;
WindManager windMan = weatherMan.getWindManager();
if (windMan == null) return;
if (this instanceof PivotingParticle) return;
//particles on ground shouldnt get blown as hard (idea for hail)
if (onGround) {
windMan.applyWindForceNew(this, (1F / 20F) * 0.3F, 0.5F, useDynamicWindSpeed);
} else {
windMan.applyWindForceNew(this, 1F / 20F, 0.5F, useDynamicWindSpeed);
}
/*if (!quatControl) {
rotationPrev = new Quaternion(rotation);
Entity ent = Minecraft.getInstance().getRenderViewEntity();
updateQuaternion(ent);
}*/
}
public void startDeath() {
if (ticksFadeOutMaxOnDeath > 0) {
ticksFadeOutCurOnDeath = 0;//ticksFadeOutMaxOnDeath;
fadingOut = true;
} else {
this.remove();
}
}
/*public void setParticleTextureIndex(int par1)
{
this.particleTextureIndexInt = par1;
if (this.getFXLayer() == 0) super.setParticleTextureIndex(par1);
}*/
/*@Override
public int getFXLayer()
{
return 5;
}*/
public void spawnAsWeatherEffect()
{
weatherEffect = true;
if (ConfigParticle.Particle_engine_weather2) {
ClientTickHandler.particleManagerExtended().add(this);
} else {
Minecraft.getInstance().particleEngine.add(this);
}
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public int getLifetime()
{
return lifetime;
}
public void setSize(float par1, float par2)
{
super.setSize(par1, par2);
// MC-12269 - fix particle being offset to the NW
this.setPos(x, y, z);
}
public void setGravity(float par) {
gravity = par;
}
public float maxRenderRange() {
return renderRange;
}
public void setScale(float parScale) {
//dont set the AABB as big as the render scale, otherwise huge performance losses, we'll just use 0.3 in constructor for now
//super.setSize(parScale, parScale);
this.setSizeForRenderCulling(parScale, parScale);
quadSize = parScale;
}
public Vector3f getPosition() {
return new Vector3f((float)x, (float)y, (float)z);
}
/*@Override
public Quaternion getQuaternion() {
return this.rotation;
}
@Override
public Quaternion getQuaternionPrev() {
return this.rotationPrev;
}*/
public float getScale() {
return quadSize;
}
public Vec3 getPos() {
return new Vec3(x, y, z);
}
public double getPosX() {
return x;
}
public void setPosX(double posX) {
this.x = posX;
}
public double getPosY() {
return y;
}
public void setPosY(double posY) {
this.y = posY;
}
public double getPosZ() {
return z;
}
public void setPosZ(double posZ) {
this.z = posZ;
}
public double getMotionX() {
return xd;
}
public void setMotionX(double motionX) {
this.xd = motionX;
}
public double getMotionY() {
return yd;
}
public void setMotionY(double motionY) {
this.yd = motionY;
}
public double getMotionZ() {
return zd;
}
public void setMotionZ(double motionZ) {
this.zd = motionZ;
}
public double getPrevPosX() {
return xo;
}
public void setPrevPosX(double prevPosX) {
this.xo = prevPosX;
}
public double getPrevPosY() {
return yo;
}
public void setPrevPosY(double prevPosY) {
this.yo = prevPosY;
}
public double getPrevPosZ() {
return zo;
}
public void setPrevPosZ(double prevPosZ) {
this.zo = prevPosZ;
}
public int getEntityId() {
return entityID;
}
public Level getWorld() {
return this.level;
}
public void setCanCollide(boolean val) {
this.hasPhysics = val;
}
public boolean getCanCollide() {
return this.hasPhysics;
}
public boolean isCollided() {
return this.onGround || isCollidedHorizontally;
}
public double getDistance(double x, double y, double z)
{
double d0 = this.x - x;
double d1 = this.y - y;
double d2 = this.z - z;
return Mth.sqrt((float) (d0 * d0 + d1 * d1 + d2 * d2));
}
@Override
public float getQuadSize(float scaleFactor) {
return this.quadSize;
}
@Override
public void render(VertexConsumer buffer, Camera renderInfo, float partialTicks) {
Vec3 Vector3d = renderInfo.getPosition();
Vec3 pivotedPosition = getPivotedPosition(partialTicks);
float f = (float)(Mth.lerp(partialTicks, this.xo, this.x) + pivotedPosition.x - Vector3d.x());
float f1 = (float)(Mth.lerp(partialTicks, this.yo, this.y) + pivotedPosition.y - Vector3d.y());
float f2 = (float)(Mth.lerp(partialTicks, this.zo, this.z) + pivotedPosition.z - Vector3d.z());
Quaternionf quaternion;
if (this.facePlayer || (this.rotationPitch == 0 && this.rotationYaw == 0)) {
quaternion = renderInfo.rotation();
} else {
// override rotations
quaternion = new Quaternionf(0, 0, 0, 1);
if (facePlayerYaw) {
quaternion.mul(Axis.YP.rotationDegrees(-renderInfo.getYRot()));
} else {
quaternion.mul(Axis.YP.rotationDegrees(Mth.lerp(partialTicks, this.prevRotationYaw, rotationYaw)));
}
quaternion.mul(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, this.prevRotationPitch, rotationPitch)));
}
Quaternionf quaternionf;
if (this.roll == 0.0F) {
quaternionf = renderInfo.rotation();
} else {
quaternionf = new Quaternionf(renderInfo.rotation());
quaternionf.rotateZ(Mth.lerp(partialTicks, this.oRoll, this.roll));
}
Vector3f[] avector3f = new Vector3f[]{new Vector3f(-1.0F, -1.0F, 0.0F), new Vector3f(-1.0F, 1.0F, 0.0F), new Vector3f(1.0F, 1.0F, 0.0F), new Vector3f(1.0F, -1.0F, 0.0F)};
float f4 = this.getQuadSize(partialTicks);
for(int i = 0; i < 4; ++i) {
Vector3f vector3f = avector3f[i];
vector3f.rotate(quaternion);
vector3f.mul(f4);
vector3f.add(f, f1, f2);
}
float f7 = this.getU0();
float f8 = this.getU1();
float f5 = this.getV0();
float f6 = this.getV1();
int j = this.getLightColor(partialTicks);
//int j = 15728800;
if (j > 0) {
lastNonZeroBrightness = j;
} else {
j = lastNonZeroBrightness;
}
buffer.vertex(avector3f[0].x(), avector3f[0].y(), avector3f[0].z()).uv(f8, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f[1].x(), avector3f[1].y(), avector3f[1].z()).uv(f8, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f[2].x(), avector3f[2].y(), avector3f[2].z()).uv(f7, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f[3].x(), avector3f[3].y(), avector3f[3].z()).uv(f7, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
}
//TODO: 1.14 uncomment
/*public void renderParticleForShader(InstancedMeshParticle mesh, Transformation transformation, Matrix4fe viewMatrix, Entity entityIn,
float partialTicks, float rotationX, float rotationZ,
float rotationYZ, float rotationXY, float rotationXZ) {
if (mesh.curBufferPos >= mesh.numInstances) return;
//camera relative positions, for world position, remove the interpPos values
float posX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) partialTicks - this.interpPosX);
float posY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) partialTicks - this.interpPosY);
float posZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) partialTicks - this.interpPosZ);
//Vector3f pos = new Vector3f((float) (entityIn.posX - particle.posX), (float) (entityIn.posY - particle.posY), (float) (entityIn.posZ - particle.posZ));
Vector3f pos = new Vector3f(posX, posY, posZ);
Matrix4fe modelMatrix = transformation.buildModelMatrix(this, pos, partialTicks);
//adjust to perspective and camera
//Matrix4fe modelViewMatrix = transformation.buildModelViewMatrix(modelMatrix, viewMatrix);
//upload to buffer
modelMatrix.get(mesh.INSTANCE_SIZE_FLOATS * (mesh.curBufferPos), mesh.instanceDataBuffer);
//brightness
float brightness;
//brightness = CoroUtilBlockLightCache.getBrightnessCached(world, (float)this.posX, (float)this.posY, (float)this.posZ);
brightness = brightnessCache;
//brightness = -1F;
//brightness = CoroUtilBlockLightCache.brightnessPlayer;
mesh.instanceDataBuffer.put(mesh.INSTANCE_SIZE_FLOATS * (mesh.curBufferPos) + mesh.MATRIX_SIZE_FLOATS, brightness);
int rgbaIndex = 0;
mesh.instanceDataBuffer.put(mesh.INSTANCE_SIZE_FLOATS * (mesh.curBufferPos)
+ mesh.MATRIX_SIZE_FLOATS + 1 + (rgbaIndex++), this.particleRed);
mesh.instanceDataBuffer.put(mesh.INSTANCE_SIZE_FLOATS * (mesh.curBufferPos)
+ mesh.MATRIX_SIZE_FLOATS + 1 + (rgbaIndex++), this.particleGreen);
mesh.instanceDataBuffer.put(mesh.INSTANCE_SIZE_FLOATS * (mesh.curBufferPos)
+ mesh.MATRIX_SIZE_FLOATS + 1 + (rgbaIndex++), this.particleBlue);
mesh.instanceDataBuffer.put(mesh.INSTANCE_SIZE_FLOATS * (mesh.curBufferPos)
+ mesh.MATRIX_SIZE_FLOATS + 1 + (rgbaIndex++), this.getAlphaF());
mesh.curBufferPos++;
}*/
/*public void renderParticleForShaderTest(InstancedMeshParticle mesh, Transformation transformation, Matrix4fe viewMatrix, Entity entityIn,
float partialTicks, float rotationX, float rotationZ,
float rotationYZ, float rotationXY, float rotationXZ) {
if (mesh.curBufferPos >= mesh.numInstances) return;
int rgbaIndex = 0;
mesh.instanceDataBufferTest.put(mesh.INSTANCE_SIZE_FLOATS_TEST * (mesh.curBufferPos)
+ (rgbaIndex++), this.getRedColorF());
mesh.instanceDataBufferTest.put(mesh.INSTANCE_SIZE_FLOATS_TEST * (mesh.curBufferPos)
+ (rgbaIndex++), this.getGreenColorF());
mesh.instanceDataBufferTest.put(mesh.INSTANCE_SIZE_FLOATS_TEST * (mesh.curBufferPos)
+ (rgbaIndex++), this.getBlueColorF());
mesh.instanceDataBufferTest.put(mesh.INSTANCE_SIZE_FLOATS_TEST * (mesh.curBufferPos)
+ (rgbaIndex++), this.getAlphaF());
mesh.curBufferPos++;
}*/
public void setKillOnCollide(boolean val) {
this.killOnCollide = val;
}
//override for extra isCollided types
@Override
public void move(double x, double y, double z) {
double xx = x;
double yy = y;
double zz = z;
if (this.hasPhysics && (x != 0.0D || y != 0.0D || z != 0.0D)) {
Vec3 Vector3d = Entity.collideBoundingBox(null, new Vec3(x, y, z), this.getBoundingBox(), this.level, List.of());
x = Vector3d.x;
y = Vector3d.y;
z = Vector3d.z;
}
if (x != 0.0D || y != 0.0D || z != 0.0D) {
this.setBoundingBox(this.getBoundingBox().move(x, y, z));
if (isUseCustomBBForRenderCulling()) {
this.setBoundingBoxForRender(this.getBoundingBoxForRender(1F).move(x, y, z));
}
/*Vec3 pivotedPosition = getPivotedPosition(0);
if (pivotedPosition != Vec3.ZERO) {
this.setBoundingBox(this.getBoundingBox().move(x + pivotedPosition.x, y + pivotedPosition.y, z + pivotedPosition.z));
} else {
this.setBoundingBox(this.getBoundingBox().move(x, y, z));
}*/
this.setLocationFromBoundingbox();
}
this.onGround = yy != y && yy < 0.0D;
this.isCollidedHorizontally = xx != x || zz != z;
this.isCollidedVerticallyDownwards = yy < y;
this.isCollidedVerticallyUpwards = yy > y;
if (xx != x) {
this.xd = 0.0D;
}
if (zz != z) {
this.zd = 0.0D;
}
if (!markCollided) {
if (onGround || isCollidedVerticallyDownwards || isCollidedHorizontally || isCollidedVerticallyUpwards) {
onHit();
markCollided = true;
}
if (bounceOnVerticalImpact && (onGround || isCollidedVerticallyDownwards)) {
setMotionY(-getMotionY() * bounceOnVerticalImpactEnergy);
}
}
}
public void setFacePlayer(boolean val) {
this.facePlayer = val;
}
public TextureAtlasSprite getParticleTexture() {
return this.sprite;
}
public boolean isVanillaMotionDampen() {
return vanillaMotionDampen;
}
public void setVanillaMotionDampen(boolean motionDampen) {
this.vanillaMotionDampen = motionDampen;
}
@Override
public int getLightColor(float p_189214_1_) {
return super.getLightColor(p_189214_1_);//(int)((float)super.getBrightnessForRender(p_189214_1_))/* * this.world.getSunBrightness(1F))*/;
}
/*public void updateQuaternion(Entity camera) {
if (camera != null) {
if (this.facePlayer) {
this.rotationYaw = camera.rotationYaw;
this.rotationPitch = camera.rotationPitch;
} else if (facePlayerYaw) {
this.rotationYaw = camera.rotationYaw;
}
}
Quaternion qY = new Quaternion();
Quaternion qX = new Quaternion();
qY.setFromAxisAngle(new Vector4f(0, 1, 0, (float)Math.toRadians(-this.rotationYaw - 180F)));
qX.setFromAxisAngle(new Vector4f(1, 0, 0, (float)Math.toRadians(-this.rotationPitch)));
if (this.rotateOrderXY) {
Quaternion.mul(qX, qY, this.rotation);
} else {
Quaternion.mul(qY, qX, this.rotation);
}
}*/
@Override
public void setColor(float particleRedIn, float particleGreenIn, float particleBlueIn) {
super.setColor(particleRedIn, particleGreenIn, particleBlueIn);
//TODO: 1.14 uncomment
/*RotatingParticleManager.markDirtyVBO2();*/
}
@Override
public void setAlpha(float alpha) {
super.setAlpha(alpha);
//TODO: 1.14 uncomment
/*RotatingParticleManager.markDirtyVBO2();*/
}
public int getKillWhenUnderTopmostBlock_ScanAheadRange() {
return killWhenUnderTopmostBlock_ScanAheadRange;
}
public void setKillWhenUnderTopmostBlock_ScanAheadRange(int killWhenUnderTopmostBlock_ScanAheadRange) {
this.killWhenUnderTopmostBlock_ScanAheadRange = killWhenUnderTopmostBlock_ScanAheadRange;
}
public boolean isCollidedVertically() {
return isCollidedVerticallyDownwards || isCollidedVerticallyUpwards;
}
@Override
public ParticleRenderType getRenderType() {
return SORTED_TRANSLUCENT;
}
@Override
public void setSprite(TextureAtlasSprite sprite) {
super.setSprite(sprite);
}
public TextureAtlasSprite getSprite() {
return sprite;
}
public float getFullAlphaTarget() {
return fullAlphaTarget;
}
public void setFullAlphaTarget(float fullAlphaTarget) {
this.fullAlphaTarget = fullAlphaTarget;
}
public int getLastNonZeroBrightness() {
return lastNonZeroBrightness;
}
public void setLastNonZeroBrightness(int lastNonZeroBrightness) {
this.lastNonZeroBrightness = lastNonZeroBrightness;
}
public void onHit() {
}
public void setMaxAge(int par) {
setLifetime(par);
}
public int getMaxAge() {
return getLifetime();
}
public void setAlphaF(float val) {
setAlpha(val);
}
public void setPosition(double posX, double posY, double posZ) {
this.setPos(posX, posY, posZ);
}
public Vec3 getPivotedPosition(float partialTicks) {
return Vec3.ZERO;
}
public void setBoundingBoxForRender(AABB p_107260_) {
this.bbRender = p_107260_;
}
public AABB getBoundingBoxForRender(float partialTicks) {
if (isUseCustomBBForRenderCulling()) {
return bbRender;
} else {
return this.getBoundingBox();
}
}
public void setSizeForRenderCulling(float p_107251_, float p_107252_) {
if (p_107251_ != this.bbWidth || p_107252_ != this.bbHeight) {
this.bbWidth = p_107251_;
this.bbHeight = p_107252_;
AABB aabb = this.getBoundingBox();
double d0 = (aabb.minX + aabb.maxX - (double)p_107251_) / 2.0D;
double d1 = (aabb.minZ + aabb.maxZ - (double)p_107251_) / 2.0D;
this.setBoundingBoxForRender(new AABB(d0, aabb.minY, d1, d0 + (double)this.bbWidth, aabb.minY + (double)this.bbHeight, d1 + (double)this.bbWidth));
}
}
public boolean isUseCustomBBForRenderCulling() {
return useCustomBBForRenderCulling;
}
public void setUseCustomBBForRenderCulling(boolean useCustomBBForRenderCulling) {
this.useCustomBBForRenderCulling = useCustomBBForRenderCulling;
}
@Override
public float getWindWeight() {
return windWeight;
}
@Override
public int getParticleDecayExtra() {
return 0;
}
public int getKillOnCollideActivateAtAge() {
return killOnCollideActivateAtAge;
}
public void setKillOnCollideActivateAtAge(int killOnCollideActivateAtAge) {
this.killOnCollideActivateAtAge = killOnCollideActivateAtAge;
}
public float getRenderDistanceCull() {
return renderDistanceCull;
}
public void setRenderDistanceCull(float renderDistanceCull) {
this.renderDistanceCull = renderDistanceCull;
}
public boolean isUseDynamicWindSpeed() {
return useDynamicWindSpeed;
}
public void setUseDynamicWindSpeed(boolean useDynamicWindSpeed) {
this.useDynamicWindSpeed = useDynamicWindSpeed;
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/entity/ParticleCrossSection.java
================================================
package extendedrenderer.particle.entity;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.level.Level;
import org.joml.Quaternionf;
import org.joml.Vector3f;
public class ParticleCrossSection extends ParticleTexFX {
public ParticleCrossSection(Level worldIn, double posXIn, double posYIn,
double posZIn, double mX, double mY, double mZ,
TextureAtlasSprite par8Item) {
super((ClientLevel) worldIn, posXIn, posYIn, posZIn, mX, mY, mZ, par8Item);
}
@Override
public void render(VertexConsumer buffer, Camera renderInfo, float partialTicks) {
Vec3 Vector3d = renderInfo.getPosition();
float f = (float)(Mth.lerp(partialTicks, this.xo, this.x) - Vector3d.x());
float f1 = (float)(Mth.lerp(partialTicks, this.yo, this.y) - Vector3d.y());
float f2 = (float)(Mth.lerp(partialTicks, this.zo, this.z) - Vector3d.z());
Quaternionf quaternion;
if (this.facePlayer || (this.rotationPitch == 0 && this.rotationYaw == 0)) {
quaternion = renderInfo.rotation();
} else {
// override rotations
quaternion = new Quaternionf(0, 0, 0, 1);
if (facePlayerYaw) {
quaternion.mul(Axis.YP.rotationDegrees(-renderInfo.getYRot()));
} else {
quaternion.mul(Axis.YP.rotationDegrees(Mth.lerp(partialTicks, this.prevRotationYaw, rotationYaw)));
}
quaternion.mul(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, this.prevRotationPitch, rotationPitch)));
}
Vector3f[] avector3f = new Vector3f[]{
new Vector3f(-1.0F, -1.0F, 0.0F),
new Vector3f(-1.0F, 1.0F, 0.0F),
new Vector3f(1.0F, 1.0F, 0.0F),
new Vector3f(1.0F, -1.0F, 0.0F)};
Vector3f[] avector3f2 = new Vector3f[]{
new Vector3f(0.0F, -1.0F, -1.0F),
new Vector3f(0.0F, 1.0F, -1.0F),
new Vector3f(0.0F, 1.0F, 1.0F),
new Vector3f(0.0F, -1.0F, 1.0F)};
Vector3f[] avector3f3 = new Vector3f[]{
new Vector3f(-1.0F, 0.0F, -1.0F),
new Vector3f(-1.0F, 0.0F, 1.0F),
new Vector3f(1.0F, 0.0F, 1.0F),
new Vector3f(1.0F, 0.0F, -1.0F)};
float f4 = this.getQuadSize(partialTicks);
for(int i = 0; i < 4; ++i) {
Vector3f vector3f = avector3f[i];
vector3f.rotate(quaternion);
vector3f.mul(f4);
vector3f.add(f, f1, f2);
}
for(int i = 0; i < 4; ++i) {
Vector3f vector3f = avector3f2[i];
vector3f.rotate(quaternion);
vector3f.mul(f4);
vector3f.add(f, f1, f2);
}
for(int i = 0; i < 4; ++i) {
Vector3f vector3f = avector3f3[i];
vector3f.rotate(quaternion);
vector3f.mul(f4);
vector3f.add(f, f1, f2);
}
float f7 = this.getU0();
float f8 = this.getU1();
float f5 = this.getV0();
float f6 = this.getV1();
int j = this.getLightColor(partialTicks);
if (j > 0) {
lastNonZeroBrightness = j;
} else {
j = lastNonZeroBrightness;
}
buffer.vertex(avector3f[0].x(), avector3f[0].y(), avector3f[0].z()).uv(f8, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f[1].x(), avector3f[1].y(), avector3f[1].z()).uv(f8, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f[2].x(), avector3f[2].y(), avector3f[2].z()).uv(f7, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f[3].x(), avector3f[3].y(), avector3f[3].z()).uv(f7, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f2[0].x(), avector3f2[0].y(), avector3f2[0].z()).uv(f8, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f2[1].x(), avector3f2[1].y(), avector3f2[1].z()).uv(f8, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f2[2].x(), avector3f2[2].y(), avector3f2[2].z()).uv(f7, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f2[3].x(), avector3f2[3].y(), avector3f2[3].z()).uv(f7, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f3[0].x(), avector3f3[0].y(), avector3f3[0].z()).uv(f8, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f3[1].x(), avector3f3[1].y(), avector3f3[1].z()).uv(f8, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f3[2].x(), avector3f3[2].y(), avector3f3[2].z()).uv(f7, f5).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
buffer.vertex(avector3f3[3].x(), avector3f3[3].y(), avector3f3[3].z()).uv(f7, f6).color(this.rCol, this.gCol, this.bCol, this.alpha).uv2(j).endVertex();
}
}
================================================
FILE: src/main/java/extendedrenderer/particle/entity/ParticleCube.java
================================================
package extendedrenderer.particle.entity;
import com.corosus.coroutil.util.CULog;
import com.corosus.coroutil.util.CoroUtilBlock;
import com.corosus.coroutil.util.CoroUtilMisc;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import extendedrenderer.particle.ParticleRegistry;
import net.minecraft.cl
gitextract_0mtt1k7r/
├── .gitattributes
├── .github/
│ └── workflows/
│ └── gradle.yml
├── .gitignore
├── CONTRIBUTING.md
├── CREDITS.txt
├── LICENSE.txt
├── README.txt
├── build.gradle
├── changelog.txt
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── libs/
│ └── coroutil-forge-1.20.1-1.3.7.jar
├── settings.gradle
└── src/
├── generated/
│ └── resources/
│ ├── .cache/
│ │ ├── 0d0f48ca72ebc11ea3eaf67230fd125a3c581fa7
│ │ ├── 59eb3dbb5f86130e09b3c62d89b9525ee01cf52d
│ │ ├── 9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e
│ │ └── f991d9ad226694c30732bf45648e031ffa7d50dc
│ ├── assets/
│ │ └── minecraft/
│ │ └── atlases/
│ │ ├── blocks.json
│ │ └── particles.json
│ └── data/
│ └── weather2/
│ ├── advancements/
│ │ └── recipes/
│ │ └── misc/
│ │ ├── anemometer.json
│ │ ├── sand_layer.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_siren.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── weather_item.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ ├── loot_tables/
│ │ └── blocks/
│ │ ├── anemometer.json
│ │ ├── sand_layer.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_siren.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ └── recipes/
│ ├── anemometer.json
│ ├── sand_layer.json
│ ├── tornado_sensor.json
│ ├── tornado_siren.json
│ ├── weather_deflector.json
│ ├── weather_forecast.json
│ ├── weather_item.json
│ ├── wind_turbine.json
│ └── wind_vane.json
└── main/
├── java/
│ ├── extendedrenderer/
│ │ ├── ExtendedRenderer.java
│ │ ├── ParticleManagerExtended.java
│ │ ├── ParticleRegistry2ElectricBubbleoo.java
│ │ ├── WeatherSpriteSourceProvider.java
│ │ └── particle/
│ │ ├── ParticleRegistry.java
│ │ ├── behavior/
│ │ │ ├── ParticleBehaviorFog.java
│ │ │ ├── ParticleBehaviorSandstorm.java
│ │ │ └── ParticleBehaviors.java
│ │ └── entity/
│ │ ├── DustEmitter.java
│ │ ├── EntityRotFX.java
│ │ ├── ParticleCrossSection.java
│ │ ├── ParticleCube.java
│ │ ├── ParticleEmitter.java
│ │ ├── ParticleTexExtraRender.java
│ │ ├── ParticleTexFX.java
│ │ ├── ParticleTexLeafColor.java
│ │ ├── PivotingParticle.java
│ │ └── WaterDropParticleImpl.java
│ └── weather2/
│ ├── ClientRegistry.java
│ ├── ClientTickHandler.java
│ ├── ClientWeatherHelper.java
│ ├── ClientWeatherProxy.java
│ ├── DeferredHelper.java
│ ├── EntityRegistry.java
│ ├── EventHandlerForge.java
│ ├── IWindHandler.java
│ ├── IWorldData.java
│ ├── PacketNBTFromClient.java
│ ├── PacketNBTFromServer.java
│ ├── PerlinNoiseHelper.java
│ ├── ServerTickHandler.java
│ ├── ServerWeatherProxy.java
│ ├── SoundRegistry.java
│ ├── Weather.java
│ ├── WeatherBlocks.java
│ ├── WeatherItems.java
│ ├── WeatherNetworking.java
│ ├── WeatherTab.java
│ ├── WorldNBTData.java
│ ├── block/
│ │ ├── AnemometerBlock.java
│ │ ├── DeflectorBlock.java
│ │ ├── ForecastBlock.java
│ │ ├── SandLayerBlock.java
│ │ ├── SensorBlock.java
│ │ ├── SirenBlock.java
│ │ ├── WeatherMachineBlock.java
│ │ ├── WindTurbineBlock.java
│ │ └── WindVaneBlock.java
│ ├── blockentity/
│ │ ├── AnemometerBlockEntity.java
│ │ ├── DeflectorBlockEntity.java
│ │ ├── SensorBlockEntity.java
│ │ ├── SirenBlockEntity.java
│ │ ├── WeatherMachineBlockEntity.java
│ │ ├── WindTurbineBlockEntity.java
│ │ └── WindVaneBlockEntity.java
│ ├── client/
│ │ ├── MovingSoundStreamingSource.java
│ │ ├── SceneEnhancer.java
│ │ ├── entity/
│ │ │ ├── model/
│ │ │ │ ├── AnemometerModel.java
│ │ │ │ ├── WindTurbineModel.java
│ │ │ │ └── WindVaneModel.java
│ │ │ ├── particle/
│ │ │ │ ├── ParticleHail.java
│ │ │ │ └── ParticleSandstorm.java
│ │ │ └── render/
│ │ │ └── LightningBoltWeatherNewRenderer.java
│ │ └── tile/
│ │ ├── AnemometerEntityRenderer.java
│ │ ├── WindTurbineEntityRenderer.java
│ │ └── WindVaneEntityRenderer.java
│ ├── command/
│ │ ├── CommandWeather2Client.java
│ │ └── WeatherCommand.java
│ ├── config/
│ │ ├── ClientConfigData.java
│ │ ├── ConfigDebug.java
│ │ ├── ConfigFoliage.java
│ │ ├── ConfigMisc.java
│ │ ├── ConfigParticle.java
│ │ ├── ConfigSand.java
│ │ ├── ConfigSnow.java
│ │ ├── ConfigSound.java
│ │ ├── ConfigStorm.java
│ │ ├── ConfigTornado.java
│ │ ├── ConfigWind.java
│ │ └── WeatherUtilConfig.java
│ ├── data/
│ │ ├── BlockAndItemProvider.java
│ │ ├── BlockLootTables.java
│ │ └── WeatherRecipeProvider.java
│ ├── datatypes/
│ │ ├── PrecipitationType.java
│ │ ├── StormState.java
│ │ └── WeatherEventType.java
│ ├── energy/
│ │ └── EnergyManager.java
│ ├── item/
│ │ └── WeatherItem.java
│ ├── ltcompat/
│ │ ├── ClientWeatherIntegration.java
│ │ └── ServerWeatherIntegration.java
│ ├── mixin/
│ │ └── client/
│ │ ├── GameRendererOverride.java
│ │ └── RenderParticlesOverride.java
│ ├── player/
│ │ └── PlayerData.java
│ ├── util/
│ │ ├── CachedNBTTagCompound.java
│ │ ├── WeatherUtil.java
│ │ ├── WeatherUtilBlock.java
│ │ ├── WeatherUtilDim.java
│ │ ├── WeatherUtilEntity.java
│ │ ├── WeatherUtilParticle.java
│ │ ├── WeatherUtilPhysics.java
│ │ ├── WeatherUtilSound.java
│ │ └── WindReader.java
│ └── weathersystem/
│ ├── WeatherManager.java
│ ├── WeatherManagerClient.java
│ ├── WeatherManagerServer.java
│ ├── fog/
│ │ ├── FogAdjuster.java
│ │ └── FogProfile.java
│ ├── storm/
│ │ ├── EnumWeatherObjectType.java
│ │ ├── LightningBoltWeather.java
│ │ ├── LightningBoltWeatherNew.java
│ │ ├── StormObject.java
│ │ ├── TornadoHelper.java
│ │ ├── WeatherEntityConfig.java
│ │ ├── WeatherObject.java
│ │ ├── WeatherObjectParticleStorm.java
│ │ ├── WeatherObjectSandstormOld.java
│ │ └── WeatherTypes.java
│ ├── tornado/
│ │ ├── ActiveTornadoConfig.java
│ │ ├── CatmullRomSpline.java
│ │ ├── CubicBezierCurve.java
│ │ ├── Path.java
│ │ ├── TornadoFunnel.java
│ │ ├── TornadoManagerTodoRenameMe.java
│ │ ├── Vector.java
│ │ └── simple/
│ │ ├── Layer.java
│ │ └── TornadoFunnelSimple.java
│ └── wind/
│ ├── WindInfoCache.java
│ └── WindManager.java
└── resources/
├── META-INF/
│ ├── accesstransformer.cfg
│ └── mods.toml
├── assets/
│ ├── coroutil/
│ │ ├── blockstates/
│ │ │ ├── blank.json
│ │ │ └── repairing_block.json
│ │ ├── config/
│ │ │ ├── loot_tables/
│ │ │ │ ├── testloot.json
│ │ │ │ └── testlootboss.json
│ │ │ └── templates/
│ │ │ ├── actions/
│ │ │ │ ├── mob_spawns.json
│ │ │ │ ├── mob_spawns_example_commented.json
│ │ │ │ └── mob_spawns_testing_miners.json
│ │ │ ├── cmods/
│ │ │ │ ├── all_cmods.json
│ │ │ │ └── invasions_cmods.json
│ │ │ └── conditions/
│ │ │ ├── all_conditions.json
│ │ │ └── invasions_stages.json
│ │ ├── lang/
│ │ │ └── en_us.json
│ │ ├── models/
│ │ │ ├── block/
│ │ │ │ ├── blank.json
│ │ │ │ └── repairing_block.json
│ │ │ └── item/
│ │ │ ├── item_repairing_gel.json
│ │ │ └── repairing_block.json
│ │ ├── shaders/
│ │ │ ├── foliage.fs
│ │ │ ├── foliage.vs
│ │ │ ├── particle.fs
│ │ │ └── particle.vs
│ │ └── textures/
│ │ └── particles/
│ │ ├── cloud.xcf
│ │ ├── cloud256.xcf
│ │ ├── clouds.xcf
│ │ └── hail.xcf
│ └── weather2/
│ ├── blockstates/
│ │ ├── anemometer.json
│ │ ├── sand_layer.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_sensor_new.json
│ │ ├── tornado_siren.json
│ │ ├── tornado_siren_manual.json
│ │ ├── tornado_siren_old.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── weather_machine.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ ├── lang/
│ │ └── en_us.json
│ ├── models/
│ │ ├── block/
│ │ │ ├── anemometer.json
│ │ │ ├── sand_height10.json
│ │ │ ├── sand_height12.json
│ │ │ ├── sand_height14.json
│ │ │ ├── sand_height2.json
│ │ │ ├── sand_height4.json
│ │ │ ├── sand_height6.json
│ │ │ ├── sand_height8.json
│ │ │ ├── tornado_sensor.json
│ │ │ ├── tornado_siren.json
│ │ │ ├── tornado_siren_manual.json
│ │ │ ├── weather_deflector.json
│ │ │ ├── weather_forecast.json
│ │ │ ├── weather_machine.json
│ │ │ ├── wind_turbine.json
│ │ │ └── wind_vane.json
│ │ └── item/
│ │ ├── anemometer.json
│ │ ├── pocket_sand.json
│ │ ├── sand_layer.json
│ │ ├── sand_layer_placeable.json
│ │ ├── tornado_sensor.json
│ │ ├── tornado_siren.json
│ │ ├── tornado_siren_manual.json
│ │ ├── weather_deflector.json
│ │ ├── weather_forecast.json
│ │ ├── weather_item.json
│ │ ├── weather_machine.json
│ │ ├── wind_turbine.json
│ │ └── wind_vane.json
│ ├── particles/
│ │ └── acidrain_splash.json
│ ├── shaders/
│ │ ├── core/
│ │ │ ├── rendertype_clouds.fsh
│ │ │ ├── rendertype_clouds.json
│ │ │ ├── rendertype_clouds.vsh
│ │ │ ├── rendertype_clouds_orig.vsh
│ │ │ └── rendertype_clouds_wip.json
│ │ └── include/
│ │ └── classicnoise3d.glsl
│ ├── sounds/
│ │ ├── env/
│ │ │ ├── waterfall.ogg
│ │ │ ├── wind_calm.ogg
│ │ │ └── wind_calmfade.ogg
│ │ └── streaming/
│ │ ├── destruction.ogg
│ │ ├── destruction_0_.ogg
│ │ ├── destruction_1_.ogg
│ │ ├── destruction_2_.ogg
│ │ ├── destruction_s.ogg
│ │ ├── destructionb.ogg
│ │ ├── sandstorm_high1.ogg
│ │ ├── sandstorm_low1.ogg
│ │ ├── sandstorm_low2.ogg
│ │ ├── sandstorm_med1.ogg
│ │ ├── sandstorm_med2.ogg
│ │ ├── siren.ogg
│ │ ├── siren_sandstorm_1.ogg
│ │ ├── siren_sandstorm_2.ogg
│ │ ├── siren_sandstorm_3.ogg
│ │ ├── siren_sandstorm_4.ogg
│ │ ├── siren_sandstorm_5_extra.ogg
│ │ ├── siren_sandstorm_6_extra.ogg
│ │ ├── wind_close.ogg
│ │ ├── wind_close_0_.ogg
│ │ ├── wind_close_1_.ogg
│ │ ├── wind_close_2_.ogg
│ │ ├── wind_far.ogg
│ │ ├── wind_far_0_.ogg
│ │ ├── wind_far_1_.ogg
│ │ └── wind_far_2_.ogg
│ └── sounds.json
├── pack.mcmeta
└── weather2.mixins.json
SYMBOL INDEX (1291 symbols across 128 files)
FILE: src/main/java/extendedrenderer/ExtendedRenderer.java
class ExtendedRenderer (line 3) | public class ExtendedRenderer {
FILE: src/main/java/extendedrenderer/ParticleManagerExtended.java
class ParticleManagerExtended (line 58) | @OnlyIn(Dist.CLIENT)
method ParticleManagerExtended (line 76) | public ParticleManagerExtended(ClientLevel p_107299_, TextureManager p...
method reload (line 83) | public CompletableFuture<Void> reload(PreparableReloadListener.Prepara...
method close (line 140) | public void close() {
method loadParticleDescription (line 144) | private Optional<List<ResourceLocation>> loadParticleDescription(Resou...
method makeParticle (line 158) | @Nullable
method add (line 164) | public void add(Particle p_107345_) {
method tick (line 177) | public void tick() {
method tickParticleList (line 208) | private void tickParticleList(Collection<Particle> p_107385_) {
method updateCount (line 226) | private void updateCount(ParticleGroup p_172282_, int p_172283_) {
method tickParticle (line 230) | private void tickParticle(Particle p_107394_) {
method render (line 243) | @Deprecated
method render (line 248) | public void render(PoseStack p_107337_, MultiBufferSource.BufferSource...
method setLevel (line 318) | public void setLevel(@Nullable ClientLevel p_107343_) {
method countParticles (line 324) | public String countParticles() {
method hasSpaceInParticleLimit (line 328) | private boolean hasSpaceInParticleLimit(ParticleGroup p_172280_) {
method clearParticles (line 332) | public void clearParticles() {
class MutableSpriteSet (line 339) | @OnlyIn(Dist.CLIENT)
method get (line 343) | public TextureAtlasSprite get(int p_107413_, int p_107414_) {
method get (line 347) | public TextureAtlasSprite get(RandomSource p_233889_) {
method rebind (line 351) | public void rebind(List<TextureAtlasSprite> p_107416_) {
method getParticles (line 356) | public Map<ParticleRenderType, Queue<Particle>> getParticles() {
FILE: src/main/java/extendedrenderer/ParticleRegistry2ElectricBubbleoo.java
class ParticleRegistry2ElectricBubbleoo (line 16) | @Mod.EventBusSubscriber(modid = Weather.MODID, bus = Mod.EventBusSubscri...
method factories (line 37) | @SubscribeEvent
method bootstrap (line 45) | public static void bootstrap() {}
FILE: src/main/java/extendedrenderer/WeatherSpriteSourceProvider.java
class WeatherSpriteSourceProvider (line 17) | public class WeatherSpriteSourceProvider extends SpriteSourceProvider
method WeatherSpriteSourceProvider (line 19) | public WeatherSpriteSourceProvider(PackOutput output, ExistingFileHelp...
method addSources (line 24) | @Override
FILE: src/main/java/extendedrenderer/particle/ParticleRegistry.java
class ParticleRegistry (line 19) | public class ParticleRegistry extends SpriteSourceProvider {
method ParticleRegistry (line 64) | public ParticleRegistry(PackOutput output, ExistingFileHelper fileHelper)
method addSources (line 69) | @Override
method addSprite (line 130) | public void addSprite(ResourceLocation res) {
method getRegisteredParticles (line 134) | @SubscribeEvent
FILE: src/main/java/extendedrenderer/particle/behavior/ParticleBehaviorFog.java
class ParticleBehaviorFog (line 6) | public class ParticleBehaviorFog extends ParticleBehaviors {
method ParticleBehaviorFog (line 17) | public ParticleBehaviorFog(Vec3 source) {
method initParticle (line 21) | public EntityRotFX initParticle(EntityRotFX particle) {
method tickUpdateAct (line 74) | @Override
FILE: src/main/java/extendedrenderer/particle/behavior/ParticleBehaviorSandstorm.java
class ParticleBehaviorSandstorm (line 16) | public class ParticleBehaviorSandstorm extends ParticleBehaviors {
method ParticleBehaviorSandstorm (line 22) | public ParticleBehaviorSandstorm(Vec3 source) {
method initParticle (line 26) | public EntityRotFX initParticle(EntityRotFX particle) {
method tickUpdateAct (line 77) | @Override
FILE: src/main/java/extendedrenderer/particle/behavior/ParticleBehaviors.java
class ParticleBehaviors (line 30) | @OnlyIn(Dist.CLIENT)
method ParticleBehaviors (line 54) | public ParticleBehaviors(Vec3 source) {
method tickUpdateList (line 58) | public void tickUpdateList() { //shouldnt be used, particles tick thei...
method tickUpdate (line 70) | public void tickUpdate(EntityRotFX particle) {
method tickUpdateAct (line 80) | public void tickUpdateAct(EntityRotFX particle) {
method tickUpdateCloud (line 164) | public void tickUpdateCloud(EntityRotFX particle) {
method spawnNewParticleIconFX (line 181) | public EntityRotFX spawnNewParticleIconFX(Level world, TextureAtlasSpr...
method spawnNewParticleIconFX (line 185) | public EntityRotFX spawnNewParticleIconFX(Level world, TextureAtlasSpr...
method initParticle (line 192) | public EntityRotFX initParticle(EntityRotFX particle) {
method initParticleRain (line 207) | public void initParticleRain(EntityRotFX particle, int extraRenderCoun...
method initParticleGroundSplash (line 246) | public void initParticleGroundSplash(EntityRotFX particle) {
method initParticleRainDownfall (line 280) | public void initParticleRainDownfall(EntityRotFX particle) {
method initParticleSnow (line 316) | public void initParticleSnow(EntityRotFX particle, int extraRenderCoun...
method initParticleSnowstorm (line 344) | public void initParticleSnowstorm(EntityRotFX particle, int extraRende...
method initParticleHail (line 368) | public void initParticleHail(EntityRotFX particle) {
method initParticleCube (line 402) | public void initParticleCube(EntityRotFX particle) {
method initParticleDustAir (line 437) | public void initParticleDustAir(EntityRotFX particle) {
method initParticleDustGround (line 467) | public void initParticleDustGround(EntityRotFX particle, boolean spawn...
method initParticleLeaf (line 501) | public void initParticleLeaf(EntityRotFX particle, float particleAABB) {
method initParticleSnowstormCloudDust (line 518) | public void initParticleSnowstormCloudDust(EntityRotFX particle) {
method initParticleSandstormDust (line 544) | public void initParticleSandstormDust(EntityRotFX particle) {
method initParticleSandstormTumbleweed (line 567) | public void initParticleSandstormTumbleweed(EntityRotFX particle) {
method initParticleSandstormDebris (line 595) | public void initParticleSandstormDebris(EntityRotFX particle) {
method setParticleRandoms (line 623) | public static EntityRotFX setParticleRandoms(EntityRotFX particle, boo...
method setParticleFire (line 630) | public static EntityRotFX setParticleFire(EntityRotFX particle) {
method setParticleCloud (line 640) | public static EntityRotFX setParticleCloud(EntityRotFX particle, float...
method cleanup (line 660) | public void cleanup() {
FILE: src/main/java/extendedrenderer/particle/entity/DustEmitter.java
class DustEmitter (line 7) | public class DustEmitter extends ParticleEmitter {
method DustEmitter (line 8) | public DustEmitter(ClientLevel par1World, double par2, double par4, do...
method tick (line 12) | @Override
FILE: src/main/java/extendedrenderer/particle/entity/EntityRotFX.java
class EntityRotFX (line 38) | @OnlyIn(Dist.CLIENT)
method begin (line 43) | @Override
method end (line 49) | @Override
method toString (line 56) | @Override
method begin (line 63) | @Override
method end (line 72) | @Override
method toString (line 79) | @Override
method EntityRotFX (line 205) | public EntityRotFX(ClientLevel par1World, double par2, double par4, do...
method isSlantParticleToWind (line 220) | public boolean isSlantParticleToWind() {
method setSlantParticleToWind (line 224) | public void setSlantParticleToWind(boolean slantParticleToWind) {
method getTicksFadeOutMaxOnDeath (line 228) | public float getTicksFadeOutMaxOnDeath() {
method setTicksFadeOutMaxOnDeath (line 232) | public void setTicksFadeOutMaxOnDeath(float ticksFadeOutMaxOnDeath) {
method isKillWhenUnderTopmostBlock (line 236) | public boolean isKillWhenUnderTopmostBlock() {
method setKillWhenUnderTopmostBlock (line 240) | public void setKillWhenUnderTopmostBlock(boolean killWhenUnderTopmostB...
method isDontRenderUnderTopmostBlock (line 244) | public boolean isDontRenderUnderTopmostBlock() {
method setDontRenderUnderTopmostBlock (line 248) | public void setDontRenderUnderTopmostBlock(boolean dontRenderUnderTopm...
method getTicksFadeInMax (line 252) | public float getTicksFadeInMax() {
method setTicksFadeInMax (line 256) | public void setTicksFadeInMax(float ticksFadeInMax) {
method getTicksFadeOutMax (line 260) | public float getTicksFadeOutMax() {
method setTicksFadeOutMax (line 264) | public void setTicksFadeOutMax(float ticksFadeOutMax) {
method getParticleTextureIndex (line 268) | public int getParticleTextureIndex()
method setLifetime (line 273) | public void setLifetime(int par) {
method getAlphaF (line 277) | public float getAlphaF()
method remove (line 282) | @Override
method tick (line 288) | @Override
method tickExtraRotations (line 410) | public void tickExtraRotations() {
method startDeath (line 435) | public void startDeath() {
method spawnAsWeatherEffect (line 456) | public void spawnAsWeatherEffect()
method getAge (line 466) | public int getAge()
method setAge (line 471) | public void setAge(int age)
method getLifetime (line 476) | public int getLifetime()
method setSize (line 481) | public void setSize(float par1, float par2)
method setGravity (line 488) | public void setGravity(float par) {
method maxRenderRange (line 492) | public float maxRenderRange() {
method setScale (line 496) | public void setScale(float parScale) {
method getPosition (line 503) | public Vector3f getPosition() {
method getScale (line 517) | public float getScale() {
method getPos (line 521) | public Vec3 getPos() {
method getPosX (line 525) | public double getPosX() {
method setPosX (line 529) | public void setPosX(double posX) {
method getPosY (line 533) | public double getPosY() {
method setPosY (line 537) | public void setPosY(double posY) {
method getPosZ (line 541) | public double getPosZ() {
method setPosZ (line 545) | public void setPosZ(double posZ) {
method getMotionX (line 549) | public double getMotionX() {
method setMotionX (line 553) | public void setMotionX(double motionX) {
method getMotionY (line 557) | public double getMotionY() {
method setMotionY (line 561) | public void setMotionY(double motionY) {
method getMotionZ (line 565) | public double getMotionZ() {
method setMotionZ (line 569) | public void setMotionZ(double motionZ) {
method getPrevPosX (line 573) | public double getPrevPosX() {
method setPrevPosX (line 577) | public void setPrevPosX(double prevPosX) {
method getPrevPosY (line 581) | public double getPrevPosY() {
method setPrevPosY (line 585) | public void setPrevPosY(double prevPosY) {
method getPrevPosZ (line 589) | public double getPrevPosZ() {
method setPrevPosZ (line 593) | public void setPrevPosZ(double prevPosZ) {
method getEntityId (line 597) | public int getEntityId() {
method getWorld (line 601) | public Level getWorld() {
method setCanCollide (line 605) | public void setCanCollide(boolean val) {
method getCanCollide (line 609) | public boolean getCanCollide() {
method isCollided (line 613) | public boolean isCollided() {
method getDistance (line 617) | public double getDistance(double x, double y, double z)
method getQuadSize (line 625) | @Override
method render (line 630) | @Override
method setKillOnCollide (line 750) | public void setKillOnCollide(boolean val) {
method move (line 755) | @Override
method setFacePlayer (line 807) | public void setFacePlayer(boolean val) {
method getParticleTexture (line 811) | public TextureAtlasSprite getParticleTexture() {
method isVanillaMotionDampen (line 815) | public boolean isVanillaMotionDampen() {
method setVanillaMotionDampen (line 819) | public void setVanillaMotionDampen(boolean motionDampen) {
method getLightColor (line 823) | @Override
method setColor (line 850) | @Override
method setAlpha (line 857) | @Override
method getKillWhenUnderTopmostBlock_ScanAheadRange (line 864) | public int getKillWhenUnderTopmostBlock_ScanAheadRange() {
method setKillWhenUnderTopmostBlock_ScanAheadRange (line 868) | public void setKillWhenUnderTopmostBlock_ScanAheadRange(int killWhenUn...
method isCollidedVertically (line 872) | public boolean isCollidedVertically() {
method getRenderType (line 876) | @Override
method setSprite (line 881) | @Override
method getSprite (line 886) | public TextureAtlasSprite getSprite() {
method getFullAlphaTarget (line 890) | public float getFullAlphaTarget() {
method setFullAlphaTarget (line 894) | public void setFullAlphaTarget(float fullAlphaTarget) {
method getLastNonZeroBrightness (line 898) | public int getLastNonZeroBrightness() {
method setLastNonZeroBrightness (line 902) | public void setLastNonZeroBrightness(int lastNonZeroBrightness) {
method onHit (line 906) | public void onHit() {
method setMaxAge (line 910) | public void setMaxAge(int par) {
method getMaxAge (line 914) | public int getMaxAge() {
method setAlphaF (line 918) | public void setAlphaF(float val) {
method setPosition (line 922) | public void setPosition(double posX, double posY, double posZ) {
method getPivotedPosition (line 926) | public Vec3 getPivotedPosition(float partialTicks) {
method setBoundingBoxForRender (line 930) | public void setBoundingBoxForRender(AABB p_107260_) {
method getBoundingBoxForRender (line 934) | public AABB getBoundingBoxForRender(float partialTicks) {
method setSizeForRenderCulling (line 942) | public void setSizeForRenderCulling(float p_107251_, float p_107252_) {
method isUseCustomBBForRenderCulling (line 954) | public boolean isUseCustomBBForRenderCulling() {
method setUseCustomBBForRenderCulling (line 958) | public void setUseCustomBBForRenderCulling(boolean useCustomBBForRende...
method getWindWeight (line 962) | @Override
method getParticleDecayExtra (line 967) | @Override
method getKillOnCollideActivateAtAge (line 972) | public int getKillOnCollideActivateAtAge() {
method setKillOnCollideActivateAtAge (line 976) | public void setKillOnCollideActivateAtAge(int killOnCollideActivateAtA...
method getRenderDistanceCull (line 980) | public float getRenderDistanceCull() {
method setRenderDistanceCull (line 984) | public void setRenderDistanceCull(float renderDistanceCull) {
method isUseDynamicWindSpeed (line 988) | public boolean isUseDynamicWindSpeed() {
method setUseDynamicWindSpeed (line 992) | public void setUseDynamicWindSpeed(boolean useDynamicWindSpeed) {
FILE: src/main/java/extendedrenderer/particle/entity/ParticleCrossSection.java
class ParticleCrossSection (line 14) | public class ParticleCrossSection extends ParticleTexFX {
method ParticleCrossSection (line 16) | public ParticleCrossSection(Level worldIn, double posXIn, double posYIn,
method render (line 22) | @Override
FILE: src/main/java/extendedrenderer/particle/entity/ParticleCube.java
class ParticleCube (line 33) | public class ParticleCube extends ParticleTexFX {
method ParticleCube (line 35) | public ParticleCube(Level worldIn, double posXIn, double posYIn,
method getSpriteFromState (line 62) | public TextureAtlasSprite getSpriteFromState(BlockState state) {
method render (line 78) | @Override
method getRenderType (line 188) | @Override
FILE: src/main/java/extendedrenderer/particle/entity/ParticleEmitter.java
class ParticleEmitter (line 7) | public class ParticleEmitter extends EntityRotFX {
method ParticleEmitter (line 9) | public ParticleEmitter(ClientLevel par1World, double par2, double par4...
method tick (line 13) | @Override
method render (line 21) | @Override
FILE: src/main/java/extendedrenderer/particle/entity/ParticleTexExtraRender.java
class ParticleTexExtraRender (line 20) | public class ParticleTexExtraRender extends ParticleTexFX {
method ParticleTexExtraRender (line 32) | public ParticleTexExtraRender(ClientLevel worldIn, double posXIn, doub...
method getSeverityOfRainRate (line 46) | public int getSeverityOfRainRate() {
method setSeverityOfRainRate (line 50) | public void setSeverityOfRainRate(int severityOfRainRate) {
method getExtraParticlesBaseAmount (line 54) | public int getExtraParticlesBaseAmount() {
method setExtraParticlesBaseAmount (line 58) | public void setExtraParticlesBaseAmount(int extraParticlesBaseAmount) {
method tickExtraRotations (line 62) | @Override
method render (line 91) | @Override
FILE: src/main/java/extendedrenderer/particle/entity/ParticleTexFX.java
class ParticleTexFX (line 8) | @OnlyIn(Dist.CLIENT)
method ParticleTexFX (line 11) | public ParticleTexFX(ClientLevel worldIn, double posXIn, double posYIn...
method getParticleGravity (line 25) | public float getParticleGravity() {
FILE: src/main/java/extendedrenderer/particle/entity/ParticleTexLeafColor.java
class ParticleTexLeafColor (line 15) | public class ParticleTexLeafColor extends ParticleTexFX {
method ParticleTexLeafColor (line 34) | public ParticleTexLeafColor(ClientLevel worldIn, double posXIn, double...
method tick (line 102) | @Override
method hasColor (line 146) | private final boolean hasColor(BlockState state) {
FILE: src/main/java/extendedrenderer/particle/entity/PivotingParticle.java
class PivotingParticle (line 16) | public class PivotingParticle extends ParticleTexFX {
method PivotingParticle (line 24) | public PivotingParticle(ClientLevel worldIn, double posXIn, double pos...
method tick (line 28) | @Override
method getPivotedPosition (line 41) | @Override
method getPivot (line 50) | public Vec3 getPivot() {
method setPivot (line 54) | public void setPivot(Vec3 pivot) {
method getPivotPrev (line 58) | public Vec3 getPivotPrev() {
method setPivotPrev (line 62) | public void setPivotPrev(Vec3 pivotPrev) {
method getPivotRot (line 66) | public Vec3 getPivotRot() {
method setPivotRot (line 70) | public void setPivotRot(Vec3 pivotRot) {
method getPivotRotPrev (line 74) | public Vec3 getPivotRotPrev() {
method setPivotRotPrev (line 78) | public void setPivotRotPrev(Vec3 pivotRotPrev) {
method getBoundingBoxForRender (line 82) | @Override
method render (line 87) | @Override
FILE: src/main/java/extendedrenderer/particle/entity/WaterDropParticleImpl.java
class WaterDropParticleImpl (line 8) | public class WaterDropParticleImpl extends WaterDropParticle {
method WaterDropParticleImpl (line 9) | public WaterDropParticleImpl(SimpleParticleType simpleParticleType, Cl...
FILE: src/main/java/weather2/ClientRegistry.java
class ClientRegistry (line 18) | @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
method clientSetup (line 21) | @OnlyIn(Dist.CLIENT)
method registerRenderers (line 27) | @OnlyIn(Dist.CLIENT)
method registerLayerDefinitions (line 35) | @OnlyIn(Dist.CLIENT)
FILE: src/main/java/weather2/ClientTickHandler.java
class ClientTickHandler (line 23) | @Mod.EventBusSubscriber(modid = Weather.MODID, value = Dist.CLIENT)
method ClientTickHandler (line 47) | private ClientTickHandler() {
method tick (line 57) | @SubscribeEvent
method onTickInGame (line 64) | public void onTickInGame()
method resetClientWeather (line 138) | public static void resetClientWeather() {
method getClientWeather (line 144) | public static WeatherManagerClient getClientWeather() {
method init (line 157) | public static void init(Level world) {
method particleManagerExtended (line 179) | public static ParticleManagerExtended particleManagerExtended() {
FILE: src/main/java/weather2/ClientWeatherHelper.java
class ClientWeatherHelper (line 15) | public final class ClientWeatherHelper {
method ClientWeatherHelper (line 24) | private ClientWeatherHelper() {
method get (line 27) | public static ClientWeatherHelper get() {
method reset (line 34) | public void reset() {
method tick (line 42) | public void tick() {
method getPrecipitationStrength (line 46) | public float getPrecipitationStrength(Player entP) {
method getPrecipitationStrength (line 57) | public float getPrecipitationStrength(Player entP, boolean forOvercast) {
method controlVisuals (line 163) | public void controlVisuals(boolean precipitating) {
method tickRainRates (line 202) | public void tickRainRates() {
FILE: src/main/java/weather2/ClientWeatherProxy.java
class ClientWeatherProxy (line 15) | public final class ClientWeatherProxy {
method ClientWeatherProxy (line 23) | private ClientWeatherProxy() {
method get (line 26) | public static ClientWeatherProxy get() {
method reset (line 33) | public void reset() {
method getRainAmount (line 39) | public float getRainAmount() {
method getVanillaRainAmount (line 50) | public float getVanillaRainAmount() {
method getPrecipitationType (line 61) | @Nullable
method getWindSpeed (line 74) | public float getWindSpeed() {
method isHeatwave (line 78) | public boolean isHeatwave() {
method isSandstorm (line 82) | public boolean isSandstorm() {
method isSnowstorm (line 98) | public boolean isSnowstorm() {
method isHail (line 115) | public boolean isHail() {
method hasWeather (line 128) | public boolean hasWeather() {
method isWeatherEffectsServerSideControlled (line 133) | public boolean isWeatherEffectsServerSideControlled() {
FILE: src/main/java/weather2/DeferredHelper.java
class DeferredHelper (line 49) | public class DeferredHelper {
method create (line 60) | public static DeferredHelper create(String modid) {
method DeferredHelper (line 66) | protected DeferredHelper(String modid) {
method block (line 71) | public <T extends Block> RegistryObject<T> block(String path, Supplier...
method fluid (line 75) | public <T extends Fluid> RegistryObject<T> fluid(String path, Supplier...
method item (line 79) | public <T extends Item> RegistryObject<T> item(String path, Supplier<T...
method effect (line 83) | public <T extends MobEffect> RegistryObject<T> effect(String path, Sup...
method sound (line 87) | public <T extends SoundEvent> RegistryObject<T> sound(String path, Sup...
method sound (line 91) | public RegistryObject<SoundEvent> sound(String path) {
method potion (line 95) | public <T extends Potion> RegistryObject<T> potion(String path, Suppli...
method enchant (line 99) | public <T extends Enchantment> RegistryObject<T> enchant(String path, ...
method entity (line 103) | public <U extends Entity, T extends EntityType<U>> RegistryObject<T> e...
method blockEntity (line 107) | public <U extends BlockEntity, T extends BlockEntityType<U>> RegistryO...
method particle (line 111) | public <U extends ParticleOptions, T extends ParticleType<U>> Registry...
method menu (line 115) | public <U extends AbstractContainerMenu, T extends MenuType<U>> Regist...
method painting (line 119) | public <T extends PaintingVariant> RegistryObject<T> painting(String p...
method recipe (line 123) | public <C extends Container, U extends Recipe<C>, T extends RecipeType...
method recipeSerializer (line 127) | public <C extends Container, U extends Recipe<C>, T extends RecipeSeri...
method attribute (line 131) | public <T extends Attribute> RegistryObject<T> attribute(String path, ...
method stat (line 135) | public <S, U extends StatType<S>, T extends StatType<U>> RegistryObjec...
method customStat (line 145) | public RegistryObject<ResourceLocation> customStat(String path, StatFo...
method feature (line 153) | public <U extends FeatureConfiguration, T extends Feature<U>> Registry...
method tab (line 157) | public <T extends CreativeModeTab> RegistryObject<T> tab(String path, ...
method custom (line 161) | public <P, T extends P> RegistryObject<T> custom(String path, Resource...
method create (line 165) | protected <P, T extends P> RegistryObject<T> create(String path, Resou...
method register (line 186) | @SubscribeEvent
FILE: src/main/java/weather2/EntityRegistry.java
class EntityRegistry (line 9) | @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
FILE: src/main/java/weather2/EventHandlerForge.java
class EventHandlerForge (line 32) | @Mod.EventBusSubscriber(modid = Weather.MODID, bus = Mod.EventBusSubscri...
method worldRender (line 35) | @SubscribeEvent
method onFogColors (line 48) | @SubscribeEvent(priority = EventPriority.LOWEST)
method onFogRender (line 55) | @SubscribeEvent(priority = EventPriority.LOWEST)
method onRenderTick (line 61) | @SubscribeEvent
method onEntityLivingUpdate (line 67) | @SubscribeEvent
method onPlayerClone (line 78) | @SubscribeEvent
method onServerPlayerUpdate (line 86) | public void onServerPlayerUpdate(LivingEvent.LivingTickEvent event) {
method onClientPlayerUpdate (line 97) | @SubscribeEvent
method registerCommandsClient (line 146) | @SubscribeEvent
FILE: src/main/java/weather2/IWindHandler.java
type IWindHandler (line 3) | public interface IWindHandler {
method getWindWeight (line 5) | float getWindWeight();
method getParticleDecayExtra (line 7) | int getParticleDecayExtra();
FILE: src/main/java/weather2/IWorldData.java
type IWorldData (line 5) | public interface IWorldData {
method save (line 7) | CompoundTag save(CompoundTag data);
FILE: src/main/java/weather2/PacketNBTFromClient.java
class PacketNBTFromClient (line 10) | public class PacketNBTFromClient {
method PacketNBTFromClient (line 13) | public PacketNBTFromClient(CompoundTag nbt) {
method encode (line 17) | public static void encode(PacketNBTFromClient msg, FriendlyByteBuf buf...
method decode (line 21) | public static PacketNBTFromClient decode(FriendlyByteBuf buffer) {
class Handler (line 25) | public static class Handler {
method handle (line 26) | public static void handle(final PacketNBTFromClient msg, Supplier<Ne...
FILE: src/main/java/weather2/PacketNBTFromServer.java
class PacketNBTFromServer (line 9) | public class PacketNBTFromServer {
method PacketNBTFromServer (line 12) | public PacketNBTFromServer(CompoundTag nbt) {
method encode (line 16) | public static void encode(PacketNBTFromServer msg, FriendlyByteBuf buf...
method decode (line 20) | public static PacketNBTFromServer decode(FriendlyByteBuf buffer) {
class Handler (line 24) | public static class Handler {
method handle (line 25) | public static void handle(final PacketNBTFromServer msg, Supplier<Ne...
FILE: src/main/java/weather2/PerlinNoiseHelper.java
class PerlinNoiseHelper (line 15) | public class PerlinNoiseHelper {
class NoiseParameters (line 17) | public static class NoiseParameters {
method NoiseParameters (line 24) | public NoiseParameters(int p_48506_, List<Double> p_48507_) {
method NoiseParameters (line 29) | public NoiseParameters(int p_151854_, double... p_151855_) {
method firstOctave (line 34) | public int firstOctave() {
method amplitudes (line 38) | public DoubleList amplitudes() {
method getSimplexNoise (line 47) | public SimplexNoise getSimplexNoise() {
method getPerlinNoise (line 51) | public PerlinNoise getPerlinNoise() {
method getNormalNoise (line 55) | public NormalNoise getNormalNoise() {
method get (line 61) | public static PerlinNoiseHelper get() {
method PerlinNoiseHelper (line 66) | public PerlinNoiseHelper() {
FILE: src/main/java/weather2/ServerTickHandler.java
class ServerTickHandler (line 32) | @Mod.EventBusSubscriber(modid = Weather.MODID)
method onWorldLoad (line 37) | @SubscribeEvent
method onWorldUnload (line 52) | @SubscribeEvent
method tickServer (line 62) | @SubscribeEvent
method tickServer (line 76) | @SubscribeEvent
method processIMCMessages (line 102) | public static void processIMCMessages() {
method tickPlayer (line 178) | @SubscribeEvent
method joinPlayer (line 185) | public static void joinPlayer(PlayerEvent.PlayerLoggedInEvent event) {
method getWeatherManagerFor (line 189) | public static WeatherManagerServer getWeatherManagerFor(ResourceKey<Le...
method getWeatherManagerFor (line 193) | public static WeatherManagerServer getWeatherManagerFor(Level level) {
method playerClientRequestsFullSync (line 197) | public static void playerClientRequestsFullSync(ServerPlayer entP) {
method syncServerConfigToClient (line 204) | public static void syncServerConfigToClient(Player player) {
FILE: src/main/java/weather2/ServerWeatherProxy.java
class ServerWeatherProxy (line 7) | public class ServerWeatherProxy {
method getWindSpeed (line 9) | public static float getWindSpeed(ServerLevel level) {
method getSandstormForEverywhere (line 17) | public static StormState getSandstormForEverywhere(ServerLevel level) {
method getSnowstormForEverywhere (line 23) | public static StormState getSnowstormForEverywhere(ServerLevel level) {
method isWeatherEffectsServerSideControlled (line 29) | public static boolean isWeatherEffectsServerSideControlled() {
FILE: src/main/java/weather2/SoundRegistry.java
class SoundRegistry (line 9) | public class SoundRegistry {
method init (line 14) | public static void init() {
method register (line 49) | public static void register(String soundPath) {
method get (line 61) | public static SoundEvent get(String soundPath) {
FILE: src/main/java/weather2/Weather.java
class Weather (line 54) | @Mod(Weather.MODID)
method Weather (line 88) | public Weather() {
method addCreative (line 132) | private void addCreative(BuildCreativeModeTabContentsEvent event)
method addConfig (line 138) | public static IConfigCategory addConfig(IConfigCategory config) {
method setup (line 143) | private void setup(final FMLCommonSetupEvent event) {
method clientSetup (line 147) | private void clientSetup(FMLClientSetupEvent event) {
method processIMC (line 152) | private void processIMC(final InterModProcessEvent event)
method serverStart (line 159) | @SubscribeEvent
method serverStop (line 165) | @SubscribeEvent
method dbg (line 170) | public static void dbg(Object obj) {
method isLoveTropicsInstalled (line 174) | public static boolean isLoveTropicsInstalled() {
method registerCommands (line 178) | private void registerCommands(RegisterCommandsEvent event) {
method gatherData (line 191) | private void gatherData(GatherDataEvent event) {
method gatherClientData (line 209) | @OnlyIn(Dist.CLIENT)
FILE: src/main/java/weather2/WeatherBlocks.java
class WeatherBlocks (line 22) | @Mod.EventBusSubscriber(modid = Weather.MODID, bus = Mod.EventBusSubscri...
method registerHandlers (line 77) | public static void registerHandlers(IEventBus modBus) {
FILE: src/main/java/weather2/WeatherItems.java
class WeatherItems (line 11) | public class WeatherItems {
method registerHandlers (line 25) | public static void registerHandlers(IEventBus modBus) {
FILE: src/main/java/weather2/WeatherNetworking.java
class WeatherNetworking (line 15) | public class WeatherNetworking {
method register (line 28) | public static void register() {
method registerMessage (line 33) | private static <MSG> void registerMessage(Class<MSG> messageType, BiCo...
FILE: src/main/java/weather2/WeatherTab.java
class WeatherTab (line 7) | public class WeatherTab extends CreativeModeTab {
method WeatherTab (line 10) | public WeatherTab(Builder builder, ItemStack tabIcon) {
FILE: src/main/java/weather2/WorldNBTData.java
class WorldNBTData (line 6) | public class WorldNBTData extends SavedData {
method WorldNBTData (line 11) | public WorldNBTData() {
method WorldNBTData (line 15) | public WorldNBTData(CompoundTag data) {
method setDataHandler (line 19) | public void setDataHandler(IWorldData dataHandler) {
method load (line 23) | public static WorldNBTData load(CompoundTag p_151484_) {
method save (line 27) | @Override
method getData (line 33) | public CompoundTag getData() {
method isDirty (line 37) | @Override
FILE: src/main/java/weather2/block/AnemometerBlock.java
class AnemometerBlock (line 32) | public class AnemometerBlock extends BaseEntityBlock {
method register (line 36) | public static final void register() {}
method AnemometerBlock (line 38) | public AnemometerBlock(Properties properties) {
method createBlockStateDefinition (line 42) | @Override
method getShape (line 47) | @Override
method getRenderShape (line 52) | @Override
method appendHoverText (line 57) | @Override
method newBlockEntity (line 64) | @Nullable
method getTicker (line 70) | @Nullable
method createTicker (line 76) | @Nullable
FILE: src/main/java/weather2/block/DeflectorBlock.java
class DeflectorBlock (line 16) | public class DeflectorBlock extends BaseEntityBlock {
method DeflectorBlock (line 18) | public DeflectorBlock(Properties p_49224_) {
method newBlockEntity (line 22) | @Nullable
method getRenderShape (line 28) | @Override
method getTicker (line 33) | @Nullable
method onRemove (line 39) | @Override
FILE: src/main/java/weather2/block/ForecastBlock.java
class ForecastBlock (line 17) | public class ForecastBlock extends Block {
method ForecastBlock (line 19) | public ForecastBlock(Properties p_49224_) {
method getRenderShape (line 23) | @Override
method use (line 28) | @Override
FILE: src/main/java/weather2/block/SandLayerBlock.java
class SandLayerBlock (line 27) | public class SandLayerBlock extends Block {
method SandLayerBlock (line 31) | public SandLayerBlock(Properties properties) {
method isPathfindable (line 36) | public boolean isPathfindable(BlockState state, BlockGetter worldIn, B...
method getShape (line 49) | public VoxelShape getShape(BlockState state, BlockGetter worldIn, Bloc...
method getCollisionShape (line 53) | public VoxelShape getCollisionShape(BlockState state, BlockGetter worl...
method getBlockSupportShape (line 57) | public VoxelShape getBlockSupportShape(BlockState state, BlockGetter r...
method getVisualShape (line 61) | public VoxelShape getVisualShape(BlockState state, BlockGetter reader,...
method useShapeForLightOcclusion (line 65) | public boolean useShapeForLightOcclusion(BlockState state) {
method canSurvive (line 69) | public boolean canSurvive(BlockState state, LevelReader worldIn, Block...
method updateShape (line 88) | public BlockState updateShape(BlockState stateIn, Direction facing, Bl...
method randomTick (line 95) | public void randomTick(BlockState state, ServerLevel worldIn, BlockPos...
method canBeReplaced (line 103) | public boolean canBeReplaced(BlockState state, BlockPlaceContext useCo...
method getStateForPlacement (line 108) | @Nullable
method createBlockStateDefinition (line 119) | protected void createBlockStateDefinition(StateDefinition.Builder<Bloc...
FILE: src/main/java/weather2/block/SensorBlock.java
class SensorBlock (line 29) | public class SensorBlock extends BaseEntityBlock {
method register (line 33) | public static final void register() {}
method SensorBlock (line 35) | public SensorBlock(Properties properties) {
method createBlockStateDefinition (line 40) | @Override
method getRenderShape (line 45) | @Override
method appendHoverText (line 50) | @Override
method newBlockEntity (line 57) | @Nullable
method getTicker (line 63) | @Nullable
method createTicker (line 69) | @Nullable
method getSignal (line 75) | @Override
method getDirectSignal (line 80) | @Override
method isSignalSource (line 85) | @Override
method setPoweredState (line 90) | public BlockState setPoweredState(BlockState pState, Level pLevel, Blo...
method toggle (line 96) | public BlockState toggle(BlockState pState, Level pLevel, BlockPos pPo...
FILE: src/main/java/weather2/block/SirenBlock.java
class SirenBlock (line 15) | public class SirenBlock extends BaseEntityBlock {
method SirenBlock (line 17) | public SirenBlock(Properties p_49224_) {
method newBlockEntity (line 21) | @Nullable
method getRenderShape (line 27) | @Override
method getTicker (line 32) | @Nullable
FILE: src/main/java/weather2/block/WeatherMachineBlock.java
class WeatherMachineBlock (line 16) | public class WeatherMachineBlock extends BaseEntityBlock {
method WeatherMachineBlock (line 18) | public WeatherMachineBlock(Properties p_49224_) {
method newBlockEntity (line 22) | @Nullable
method getRenderShape (line 28) | @Override
FILE: src/main/java/weather2/block/WindTurbineBlock.java
class WindTurbineBlock (line 30) | public class WindTurbineBlock extends BaseEntityBlock {
method register (line 34) | public static final void register() {}
method WindTurbineBlock (line 36) | public WindTurbineBlock(Properties properties) {
method createBlockStateDefinition (line 40) | @Override
method getShape (line 45) | @Override
method getRenderShape (line 50) | @Override
method appendHoverText (line 55) | @Override
method newBlockEntity (line 62) | @Nullable
method getTicker (line 68) | @Nullable
method createTicker (line 74) | @Nullable
FILE: src/main/java/weather2/block/WindVaneBlock.java
class WindVaneBlock (line 31) | public class WindVaneBlock extends BaseEntityBlock {
method register (line 35) | public static final void register() {}
method WindVaneBlock (line 37) | public WindVaneBlock(Properties properties) {
method createBlockStateDefinition (line 41) | @Override
method getShape (line 46) | @Override
method getRenderShape (line 51) | @Override
method appendHoverText (line 56) | @Override
method newBlockEntity (line 63) | @Nullable
method getTicker (line 69) | @Nullable
method createTicker (line 75) | @Nullable
FILE: src/main/java/weather2/blockentity/AnemometerBlockEntity.java
class AnemometerBlockEntity (line 15) | public class AnemometerBlockEntity extends BlockEntity {
method AnemometerBlockEntity (line 24) | public AnemometerBlockEntity(BlockPos p_155229_, BlockState p_155230_) {
method setLevel (line 28) | @Override
method tick (line 33) | public static void tick(Level level, BlockPos pos, BlockState state, A...
method tick (line 37) | public void tick(Level level, BlockPos pos, BlockState state) {
method load (line 67) | @Override
method saveAdditional (line 72) | @Override
FILE: src/main/java/weather2/blockentity/DeflectorBlockEntity.java
class DeflectorBlockEntity (line 13) | public class DeflectorBlockEntity extends BlockEntity {
method DeflectorBlockEntity (line 17) | public DeflectorBlockEntity(BlockPos p_155229_, BlockState p_155230_) {
method tickHelper (line 21) | public static void tickHelper(Level level, BlockPos pos, BlockState st...
method tick (line 25) | public void tick() {
method init (line 32) | public void init() {
method blockBroken (line 38) | public void blockBroken() {
method setRemoved (line 46) | @Override
FILE: src/main/java/weather2/blockentity/SensorBlockEntity.java
class SensorBlockEntity (line 19) | public class SensorBlockEntity extends BlockEntity {
method SensorBlockEntity (line 21) | public SensorBlockEntity(BlockPos p_155229_, BlockState p_155230_) {
method setLevel (line 25) | @Override
method tick (line 30) | public static void tick(Level level, BlockPos pos2, BlockState state, ...
method setPoweredState (line 45) | public void setPoweredState(boolean state) {
method load (line 52) | @Override
method saveAdditional (line 57) | @Override
FILE: src/main/java/weather2/blockentity/SirenBlockEntity.java
class SirenBlockEntity (line 22) | public class SirenBlockEntity extends BlockEntity {
method SirenBlockEntity (line 26) | public SirenBlockEntity(BlockPos p_155229_, BlockState p_155230_) {
method tickHelper (line 30) | public static void tickHelper(Level level, BlockPos pos, BlockState st...
method tick (line 34) | public void tick() {
method tickClient (line 40) | @OnlyIn(Dist.CLIENT)
FILE: src/main/java/weather2/blockentity/WeatherMachineBlockEntity.java
class WeatherMachineBlockEntity (line 9) | public class WeatherMachineBlockEntity extends BlockEntity {
method WeatherMachineBlockEntity (line 10) | public WeatherMachineBlockEntity(BlockPos p_155229_, BlockState p_1552...
method tickHelper (line 14) | public static void tickHelper(Level level, BlockPos pos, BlockState st...
FILE: src/main/java/weather2/blockentity/WindTurbineBlockEntity.java
class WindTurbineBlockEntity (line 22) | public class WindTurbineBlockEntity extends BlockEntity {
method WindTurbineBlockEntity (line 44) | public WindTurbineBlockEntity(BlockPos p_155229_, BlockState p_155230_) {
method setLevel (line 51) | @Override
method tick (line 56) | public static void tick(Level level, BlockPos pos, BlockState state, W...
method tick (line 60) | public void tick(Level level, BlockPos pos, BlockState state) {
method updateIsOutside (line 103) | public void updateIsOutside() {
method outputEnergy (line 107) | public void outputEnergy() {
method load (line 128) | @Override
method saveAdditional (line 133) | @Override
method getCapability (line 138) | @Override
method invalidateCaps (line 147) | @Override
FILE: src/main/java/weather2/blockentity/WindVaneBlockEntity.java
class WindVaneBlockEntity (line 15) | public class WindVaneBlockEntity extends BlockEntity {
method WindVaneBlockEntity (line 23) | public WindVaneBlockEntity(BlockPos p_155229_, BlockState p_155230_) {
method setLevel (line 27) | @Override
method tick (line 32) | public static void tick(Level level, BlockPos pos, BlockState state, W...
method tick (line 36) | public void tick(Level level, BlockPos pos, BlockState state) {
method load (line 69) | @Override
method saveAdditional (line 74) | @Override
FILE: src/main/java/weather2/client/MovingSoundStreamingSource.java
class MovingSoundStreamingSource (line 14) | public class MovingSoundStreamingSource extends AbstractTickableSoundIns...
method MovingSoundStreamingSource (line 22) | public MovingSoundStreamingSource(Vec3 parPos, SoundEvent event, Sound...
method MovingSoundStreamingSource (line 36) | public MovingSoundStreamingSource(Vec3 parPos, SoundEvent event, Sound...
method MovingSoundStreamingSource (line 51) | public MovingSoundStreamingSource(StormObject parStorm, SoundEvent eve...
method tick (line 65) | public void tick()
method getDistanceFrom (line 92) | public double getDistanceFrom(Vec3 source, Vec3 targ)
FILE: src/main/java/weather2/client/SceneEnhancer.java
class SceneEnhancer (line 59) | @OnlyIn(Dist.CLIENT)
method SceneEnhancer (line 108) | public SceneEnhancer() {
method run (line 120) | @Override
method tickClient (line 133) | public void tickClient() {
method tickClientThreaded (line 197) | public void tickClientThreaded() {
method trySoundPlaying (line 208) | public synchronized void trySoundPlaying()
method tickRainSound (line 305) | public void tickRainSound() {
method tryAmbientSounds (line 354) | @OnlyIn(Dist.CLIENT)
method reset (line 405) | public void reset() {
method tickHeatwave (line 412) | private static void tickHeatwave(ClientWeatherProxy weather) {
method tryPlayPlayerLockedSound (line 434) | public static boolean tryPlayPlayerLockedSound(String[] sound, int arr...
method tickMisc (line 453) | public void tickMisc() {
method tickEnvironmentalParticleSpawning (line 468) | public void tickEnvironmentalParticleSpawning() {
method canPrecipitateAt (line 1105) | public static boolean canPrecipitateAt(Level world, BlockPos strikePos...
method tryParticleSpawning (line 1110) | public synchronized void tryParticleSpawning()
method profileSurroundings (line 1134) | public void profileSurroundings()
method getRandomWorkingPos (line 1355) | public static BlockPos getRandomWorkingPos(Level world, BlockPos posOr...
method tryWind (line 1368) | @OnlyIn(Dist.CLIENT)
method getBlock (line 1413) | @OnlyIn(Dist.CLIENT)
method getBlock (line 1419) | @OnlyIn(Dist.CLIENT)
method getBlockState (line 1437) | @OnlyIn(Dist.CLIENT)
method getBlockState (line 1443) | @OnlyIn(Dist.CLIENT)
method isFogOverridding (line 1461) | public static boolean isFogOverridding() {
method renderTick (line 1470) | public static void renderTick(TickEvent.RenderTickEvent event) {
method tickSandstorm (line 1478) | public static void tickSandstorm() {
method tickSandstormSound (line 1603) | public static void tickSandstormSound() {
method getFogAdjuster (line 1627) | public static FogAdjuster getFogAdjuster() {
method getWeatherState (line 1634) | public static WeatherEventType getWeatherState() {
method getParticleFadeInLerpForNewWeatherState (line 1653) | public static float getParticleFadeInLerpForNewWeatherState() {
method shouldRainHere (line 1665) | public static boolean shouldRainHere(Level level, Biome biome, BlockPo...
method shouldSnowHere (line 1677) | public static boolean shouldSnowHere(Level level, Biome biome, BlockPo...
method checkParticleBehavior (line 1681) | public static void checkParticleBehavior() {
FILE: src/main/java/weather2/client/entity/model/AnemometerModel.java
class AnemometerModel (line 18) | public class AnemometerModel<T extends Entity> extends HierarchicalModel...
method AnemometerModel (line 23) | public AnemometerModel(ModelPart root) {
method root (line 27) | @Override
method createBodyLayer (line 32) | public static LayerDefinition createBodyLayer() {
method setupAnim (line 73) | @Override
method renderToBuffer (line 78) | @Override
FILE: src/main/java/weather2/client/entity/model/WindTurbineModel.java
class WindTurbineModel (line 17) | public class WindTurbineModel<T extends Entity> extends HierarchicalMode...
method WindTurbineModel (line 22) | public WindTurbineModel(ModelPart root) {
method root (line 26) | @Override
method createBodyLayer (line 31) | public static LayerDefinition createBodyLayer() {
method setupAnim (line 58) | @Override
method renderToBuffer (line 63) | @Override
FILE: src/main/java/weather2/client/entity/model/WindVaneModel.java
class WindVaneModel (line 19) | public class WindVaneModel<T extends Entity> extends HierarchicalModel<T> {
method WindVaneModel (line 24) | public WindVaneModel(ModelPart root) {
method root (line 28) | @Override
method createBodyLayer (line 33) | public static LayerDefinition createBodyLayer() {
method setupAnim (line 81) | @Override
method renderToBuffer (line 86) | @Override
FILE: src/main/java/weather2/client/entity/particle/ParticleHail.java
class ParticleHail (line 13) | public class ParticleHail extends ParticleCrossSection {
method ParticleHail (line 15) | public ParticleHail(ClientLevel worldIn, double posXIn, double posYIn,...
method tick (line 19) | @Override
method onHit (line 24) | @Override
FILE: src/main/java/weather2/client/entity/particle/ParticleSandstorm.java
class ParticleSandstorm (line 12) | public class ParticleSandstorm extends ParticleTexFX {
method ParticleSandstorm (line 19) | public ParticleSandstorm(Level worldIn, double posXIn, double posYIn,
method render (line 25) | @Override
FILE: src/main/java/weather2/client/entity/render/LightningBoltWeatherNewRenderer.java
class LightningBoltWeatherNewRenderer (line 17) | @OnlyIn(Dist.CLIENT)
method LightningBoltWeatherNewRenderer (line 19) | public LightningBoltWeatherNewRenderer(EntityRendererProvider.Context ...
method render (line 23) | public void render(LightningBoltWeatherNew p_115266_, float p_115267_,...
method quad (line 92) | private static void quad(Matrix4f p_115273_, VertexConsumer p_115274_,...
method getTextureLocation (line 99) | public ResourceLocation getTextureLocation(LightningBoltWeatherNew p_1...
FILE: src/main/java/weather2/client/tile/AnemometerEntityRenderer.java
class AnemometerEntityRenderer (line 31) | public class AnemometerEntityRenderer<T extends BlockEntity> implements ...
method getTEMaterial (line 36) | public static Material getTEMaterial(final String path) {
method createTEMaterial (line 40) | private static Material createTEMaterial(final String path) {
method getTextureTE (line 44) | public static ResourceLocation getTextureTE(String path) {
method getTexture (line 48) | public static ResourceLocation getTexture(String path) {
method getResLoc (line 52) | private static ResourceLocation getResLoc(String path) {
method renderModel (line 56) | public static void renderModel(final Material material, final Model mo...
method AnemometerEntityRenderer (line 63) | public AnemometerEntityRenderer(final BlockEntityRendererProvider.Cont...
method render (line 69) | @Override
FILE: src/main/java/weather2/client/tile/WindTurbineEntityRenderer.java
class WindTurbineEntityRenderer (line 31) | public class WindTurbineEntityRenderer<T extends BlockEntity> implements...
method getTEMaterial (line 36) | public static Material getTEMaterial(final String path) {
method createTEMaterial (line 40) | private static Material createTEMaterial(final String path) {
method getTextureTE (line 44) | public static ResourceLocation getTextureTE(String path) {
method getTexture (line 48) | public static ResourceLocation getTexture(String path) {
method getResLoc (line 52) | private static ResourceLocation getResLoc(String path) {
method renderModel (line 56) | public static void renderModel(final Material material, final Model mo...
method WindTurbineEntityRenderer (line 63) | public WindTurbineEntityRenderer(final BlockEntityRendererProvider.Con...
method render (line 69) | @Override
FILE: src/main/java/weather2/client/tile/WindVaneEntityRenderer.java
class WindVaneEntityRenderer (line 30) | public class WindVaneEntityRenderer<T extends BlockEntity> implements Bl...
method getTEMaterial (line 35) | public static Material getTEMaterial(final String path) {
method createTEMaterial (line 39) | private static Material createTEMaterial(final String path) {
method getTextureTE (line 43) | public static ResourceLocation getTextureTE(String path) {
method getTexture (line 47) | public static ResourceLocation getTexture(String path) {
method getResLoc (line 51) | private static ResourceLocation getResLoc(String path) {
method renderModel (line 55) | public static void renderModel(final Material material, final Model mo...
method WindVaneEntityRenderer (line 62) | public WindVaneEntityRenderer(final BlockEntityRendererProvider.Contex...
method render (line 68) | @Override
FILE: src/main/java/weather2/command/CommandWeather2Client.java
class CommandWeather2Client (line 30) | public class CommandWeather2Client {
method register (line 31) | public static void register(final CommandDispatcher<CommandSourceStack...
method getParticles (line 161) | public static Map<ParticleRenderType, Queue<Particle>> getParticles() {
method msg (line 172) | public static void msg(CommandContext<CommandSourceStack> c, String ms...
method getCommandName (line 176) | public static String getCommandName() {
FILE: src/main/java/weather2/command/WeatherCommand.java
class WeatherCommand (line 28) | public class WeatherCommand {
method register (line 29) | public static void register(final CommandDispatcher<CommandSourceStack...
method summonStorm (line 330) | private static StormObject summonStorm(CommandContext<CommandSourceSta...
FILE: src/main/java/weather2/config/ClientConfigData.java
class ClientConfigData (line 8) | public class ClientConfigData {
method readNBT (line 24) | public void readNBT(CompoundTag nbt) {
method writeNBT (line 40) | public static void writeNBT(CompoundTag data) {
FILE: src/main/java/weather2/config/ConfigDebug.java
class ConfigDebug (line 9) | public class ConfigDebug implements IConfigCategory {
method getName (line 16) | @Override
method getRegistryName (line 21) | @Override
method getConfigFileName (line 26) | @Override
method getCategory (line 31) | @Override
method hookUpdatedValues (line 36) | @Override
FILE: src/main/java/weather2/config/ConfigFoliage.java
class ConfigFoliage (line 8) | public class ConfigFoliage implements IConfigCategory {
method getName (line 14) | @Override
method getRegistryName (line 19) | @Override
method getConfigFileName (line 24) | @Override
method getCategory (line 29) | @Override
method hookUpdatedValues (line 34) | @Override
FILE: src/main/java/weather2/config/ConfigMisc.java
class ConfigMisc (line 13) | public class ConfigMisc implements IConfigCategory {
method ConfigMisc (line 106) | public ConfigMisc() {
method getName (line 110) | @Override
method getRegistryName (line 115) | @Override
method getConfigFileName (line 120) | @Override
method getCategory (line 125) | @Override
method hookUpdatedValues (line 130) | @Override
FILE: src/main/java/weather2/config/ConfigParticle.java
class ConfigParticle (line 10) | public class ConfigParticle implements IConfigCategory {
method getName (line 45) | @Override
method getRegistryName (line 50) | @Override
method getConfigFileName (line 55) | @Override
method getCategory (line 60) | @Override
method hookUpdatedValues (line 65) | @Override
FILE: src/main/java/weather2/config/ConfigSand.java
class ConfigSand (line 10) | public class ConfigSand implements IConfigCategory {
method getName (line 40) | @Override
method getRegistryName (line 45) | @Override
method getConfigFileName (line 50) | @Override
method getCategory (line 55) | @Override
method hookUpdatedValues (line 60) | @Override
FILE: src/main/java/weather2/config/ConfigSnow.java
class ConfigSnow (line 10) | public class ConfigSnow implements IConfigCategory {
method getName (line 31) | @Override
method getRegistryName (line 36) | @Override
method getConfigFileName (line 41) | @Override
method getCategory (line 46) | @Override
method hookUpdatedValues (line 51) | @Override
FILE: src/main/java/weather2/config/ConfigSound.java
class ConfigSound (line 9) | public class ConfigSound implements IConfigCategory {
method getName (line 22) | @Override
method getRegistryName (line 27) | @Override
method getConfigFileName (line 32) | @Override
method getCategory (line 37) | @Override
method hookUpdatedValues (line 42) | @Override
FILE: src/main/java/weather2/config/ConfigStorm.java
class ConfigStorm (line 10) | public class ConfigStorm implements IConfigCategory {
method getName (line 96) | @Override
method getRegistryName (line 101) | @Override
method getConfigFileName (line 106) | @Override
method getCategory (line 111) | @Override
method hookUpdatedValues (line 116) | @Override
FILE: src/main/java/weather2/config/ConfigTornado.java
class ConfigTornado (line 12) | public class ConfigTornado implements IConfigCategory {
method getName (line 70) | @Override
method getRegistryName (line 75) | @Override
method getConfigFileName (line 80) | @Override
method getCategory (line 85) | @Override
method hookUpdatedValues (line 90) | @Override
FILE: src/main/java/weather2/config/ConfigWind.java
class ConfigWind (line 9) | public class ConfigWind implements IConfigCategory {
method getName (line 35) | @Override
method getRegistryName (line 40) | @Override
method getConfigFileName (line 45) | @Override
method getCategory (line 50) | @Override
method hookUpdatedValues (line 55) | @Override
FILE: src/main/java/weather2/config/WeatherUtilConfig.java
class WeatherUtilConfig (line 10) | public class WeatherUtilConfig {
method shouldTickClouds (line 18) | public static boolean shouldTickClouds(String levelResourceKey) {
method processLists (line 22) | public static void processLists() {
method parseList (line 29) | public static List<String> parseList(String parData) {
FILE: src/main/java/weather2/data/BlockAndItemProvider.java
class BlockAndItemProvider (line 12) | public class BlockAndItemProvider extends SpriteSourceProvider {
method BlockAndItemProvider (line 14) | public BlockAndItemProvider(PackOutput output, ExistingFileHelper file...
method addSources (line 19) | @Override
method addSpriteBlock (line 37) | public void addSpriteBlock(String textureName) {
method addSpriteItem (line 41) | public void addSpriteItem(String textureName) {
FILE: src/main/java/weather2/data/BlockLootTables.java
class BlockLootTables (line 13) | public class BlockLootTables extends BlockLootSubProvider {
method BlockLootTables (line 15) | public BlockLootTables() {
method generate (line 19) | @Override
method getKnownBlocks (line 31) | @Override
FILE: src/main/java/weather2/data/WeatherRecipeProvider.java
class WeatherRecipeProvider (line 16) | public class WeatherRecipeProvider extends RecipeProvider {
method WeatherRecipeProvider (line 18) | public WeatherRecipeProvider(PackOutput p_125973_) {
method buildRecipes (line 22) | @Override
FILE: src/main/java/weather2/datatypes/PrecipitationType.java
type PrecipitationType (line 3) | public enum PrecipitationType {
FILE: src/main/java/weather2/datatypes/StormState.java
class StormState (line 5) | public final class StormState {
method StormState (line 9) | public StormState(int buildupTickRate, int maxStackable) {
method getBuildupTickRate (line 14) | public int getBuildupTickRate() {
method getMaxStackable (line 18) | public int getMaxStackable() {
method encode (line 22) | public void encode(FriendlyByteBuf buffer) {
method decode (line 27) | public static StormState decode(FriendlyByteBuf buffer) {
FILE: src/main/java/weather2/datatypes/WeatherEventType.java
type WeatherEventType (line 3) | public enum WeatherEventType {
method WeatherEventType (line 15) | WeatherEventType(String key) {
method getKey (line 19) | public String getKey() {
FILE: src/main/java/weather2/energy/EnergyManager.java
class EnergyManager (line 10) | public class EnergyManager extends EnergyStorage {
method EnergyManager (line 13) | public EnergyManager(int maxTransfer, int capacity) {
method getMaxExtract (line 17) | public int getMaxExtract() {
method setReceiveOnly (line 21) | public void setReceiveOnly() {
method getMaxEnergyReceived (line 36) | public int getMaxEnergyReceived() {
method drainEnergy (line 43) | public void drainEnergy(int amount) {
method addEnergy (line 47) | public void addEnergy(int amount) {
method getEnergy (line 51) | public int getEnergy() {
method setEnergyStored (line 55) | public void setEnergyStored(int energyStored) {
method getCapability (line 64) | public <T> LazyOptional<T> getCapability(Capability<T> capability) {
FILE: src/main/java/weather2/item/WeatherItem.java
class WeatherItem (line 8) | public class WeatherItem extends Item {
method WeatherItem (line 9) | public WeatherItem(Item.Properties properties) {
FILE: src/main/java/weather2/ltcompat/ClientWeatherIntegration.java
class ClientWeatherIntegration (line 5) | public final class ClientWeatherIntegration {
method ClientWeatherIntegration (line 8) | private ClientWeatherIntegration() {
method get (line 11) | public static ClientWeatherIntegration get() {
method reset (line 15) | public static void reset() {
method getRainAmount (line 19) | public float getRainAmount() {
method getVanillaRainAmount (line 23) | public float getVanillaRainAmount() {
method getPrecipitationType (line 27) | public PrecipitationType getPrecipitationType() {
method getWindSpeed (line 31) | public float getWindSpeed() {
method isHeatwave (line 35) | public boolean isHeatwave() {
method isSandstorm (line 39) | public boolean isSandstorm() {
method isSnowstorm (line 43) | public boolean isSnowstorm() {
method hasWeather (line 47) | public boolean hasWeather() {
FILE: src/main/java/weather2/ltcompat/ServerWeatherIntegration.java
class ServerWeatherIntegration (line 7) | public class ServerWeatherIntegration {
method getWindSpeed (line 9) | public static float getWindSpeed(ServerLevel level) {
method getSandstormForEverywhere (line 13) | public static StormState getSandstormForEverywhere(ServerLevel level) {
method getSnowstormForEverywhere (line 17) | public static StormState getSnowstormForEverywhere(ServerLevel level) {
FILE: src/main/java/weather2/mixin/client/GameRendererOverride.java
class GameRendererOverride (line 8) | @Mixin(GameRenderer.class)
method getDepthFar (line 17) | @Overwrite
FILE: src/main/java/weather2/mixin/client/RenderParticlesOverride.java
class RenderParticlesOverride (line 18) | @Mixin(LevelRenderer.class)
method renderSnowAndRain (line 31) | @Redirect(method = "renderLevel",
FILE: src/main/java/weather2/player/PlayerData.java
class PlayerData (line 13) | public class PlayerData {
method getPlayerNBT (line 17) | public static CompoundTag getPlayerNBT(String username) {
FILE: src/main/java/weather2/util/CachedNBTTagCompound.java
class CachedNBTTagCompound (line 12) | public class CachedNBTTagCompound {
method CachedNBTTagCompound (line 17) | public CachedNBTTagCompound() {
method setCachedNBT (line 22) | public void setCachedNBT(CompoundTag cachedData) {
method getCachedNBT (line 28) | public CompoundTag getCachedNBT() {
method getNewNBT (line 32) | public CompoundTag getNewNBT() {
method setNewNBT (line 36) | public void setNewNBT(CompoundTag newData) {
method setUpdateForced (line 40) | public void setUpdateForced(boolean forced) {
method getLong (line 44) | public long getLong(String key) {
method putLong (line 50) | public void putLong(String key, long newVal) {
method getInt (line 57) | public int getInt(String key) {
method putInt (line 63) | public void putInt(String key, int newVal) {
method getShort (line 70) | public short getShort(String key) {
method putShort (line 76) | public void putShort(String key, short newVal) {
method getString (line 83) | public String getString(String key) {
method putString (line 89) | public void putString(String key, String newVal) {
method getBoolean (line 96) | public boolean getBoolean(String key) {
method putBoolean (line 102) | public void putBoolean(String key, boolean newVal) {
method getFloat (line 109) | public float getFloat(String key) {
method putFloat (line 115) | public void putFloat(String key, float newVal) {
method getDouble (line 122) | public double getDouble(String key) {
method putDouble (line 128) | public void putDouble(String key, double newVal) {
method get (line 135) | public CompoundTag get(String key) {
method put (line 140) | public void put(String key, CompoundTag tag) {
method contains (line 145) | public boolean contains(String key) {
method updateCacheFromNew (line 149) | public void updateCacheFromNew() {
FILE: src/main/java/weather2/util/WeatherUtil.java
class WeatherUtil (line 26) | public class WeatherUtil {
method updateGrabBlockList (line 34) | public static void updateGrabBlockList(String grabListStr) {
method testAllBlocks (line 57) | public static void testAllBlocks() {
method addNamespaceIfMissing (line 77) | public static String addNamespaceIfMissing(String str) {
method isStateInListOfTags (line 84) | public static boolean isStateInListOfTags(BlockState state) {
method getTagKeyFor (line 96) | public static TagKey<Block> getTagKeyFor(String str) {
method canGrabViaLists (line 100) | public static boolean canGrabViaLists(BlockState state) {
method isPaused (line 121) | public static boolean isPaused() {
method isPausedSideSafe (line 126) | public static boolean isPausedSideSafe(Level world) {
method isPausedForClient (line 132) | public static boolean isPausedForClient() {
method isAprilFoolsDay (line 137) | public static boolean isAprilFoolsDay() {
method shouldRemoveBlock (line 147) | public static boolean shouldRemoveBlock(BlockState blockID)
method isOceanBlock (line 158) | public static boolean isOceanBlock(Block blockID)
method isSolidBlock (line 163) | public static boolean isSolidBlock(Block id)
method shouldGrabBlock (line 170) | public static boolean shouldGrabBlock(Level parWorld, BlockState state)
method safetyCheck (line 245) | public static boolean safetyCheck(BlockState state)
method getWorld (line 258) | public static ServerLevel getWorld(ResourceKey<Level> levelResourceKey) {
method canTornadoGrabBlockRefinedRules (line 262) | public static boolean canTornadoGrabBlockRefinedRules(BlockState state) {
method dist (line 272) | public static float dist(Vector3f vec1, Vector3f vec2) {
method dist (line 279) | public static double dist(Vector3d vec1, Vector3d vec2) {
FILE: src/main/java/weather2/util/WeatherUtilBlock.java
class WeatherUtilBlock (line 32) | public class WeatherUtilBlock {
method fillAgainstWallSmoothly (line 39) | public static void fillAgainstWallSmoothly(Level world, Vec3 posSource...
method fillAgainstWallSmoothly (line 43) | public static void fillAgainstWallSmoothly(Level world, Vec3 posSource...
method trySpreadOnPos2 (line 199) | public static int trySpreadOnPos2(Level world, BlockPos posSpreadTo, i...
method getHeightForAnyBlock (line 396) | public static int getHeightForAnyBlock(BlockState state) {
method getHeightForLayeredBlock (line 413) | public static int getHeightForLayeredBlock(BlockState state) {
method setBlockWithLayerState (line 426) | public static BlockState setBlockWithLayerState(Block block, int heigh...
method getPrecipitationHeightSafe (line 446) | public static BlockPos getPrecipitationHeightSafe(Level world, BlockPo...
method getPrecipitationHeightSafe (line 457) | public static BlockPos getPrecipitationHeightSafe(Level world, BlockPo...
FILE: src/main/java/weather2/util/WeatherUtilDim.java
class WeatherUtilDim (line 7) | public class WeatherUtilDim {
method canBlockSeeSky (line 9) | public static boolean canBlockSeeSky(Level world, BlockPos pos) {
method getSeaLevel (line 29) | public static int getSeaLevel(Level world) {
FILE: src/main/java/weather2/util/WeatherUtilEntity.java
class WeatherUtilEntity (line 31) | public class WeatherUtilEntity {
method getWeight (line 33) | public static float getWeight(Object entity1, boolean forTornado)
method getWeightAdjFromEquipment (line 110) | public static float getWeightAdjFromEquipment(float weightIn, Player p...
method getWeight (line 120) | public static float getWeight(Object entity1)
method isParticleRotServerSafe (line 178) | public static boolean isParticleRotServerSafe(Level world, Object obj) {
method isParticleRotClientCheck (line 186) | public static boolean isParticleRotClientCheck(Object obj) {
method getDistanceSqEntToPos (line 190) | public static double getDistanceSqEntToPos(Entity ent, BlockPos pos) {
method isEntityOutside (line 194) | public static boolean isEntityOutside(Entity parEnt) {
method isEntityOutside (line 198) | public static boolean isEntityOutside(Entity parEnt, boolean cheapChec...
method isPosOutside (line 202) | public static boolean isPosOutside(Level parWorld, Vec3 parPos) {
method isPosOutside (line 206) | public static boolean isPosOutside(Level parWorld, Vec3 parPos, boolea...
method checkVecOutside (line 266) | public static boolean checkVecOutside(Level parWorld, Vec3 parPos, Vec...
method isPlayerSheltered (line 278) | public static boolean isPlayerSheltered(Entity player) {
method canPosSeePos (line 285) | public static boolean canPosSeePos(Level level, Vec3 pos1, Vec3 pos2) {
FILE: src/main/java/weather2/util/WeatherUtilParticle.java
class WeatherUtilParticle (line 23) | public class WeatherUtilParticle {
method getParticleAge (line 40) | public static int getParticleAge(Particle ent)
method setParticleAge (line 47) | public static void setParticleAge(Particle ent, int val)
method getFXLayers (line 53) | @OnlyIn(Dist.CLIENT)
method getParticleWeight (line 82) | @OnlyIn(Dist.CLIENT)
method getPos (line 114) | public static BlockPos getPos(Particle particle) {
FILE: src/main/java/weather2/util/WeatherUtilPhysics.java
class WeatherUtilPhysics (line 13) | public class WeatherUtilPhysics {
method isInConvexShape (line 22) | public static boolean isInConvexShape(Vec3 test, List<Vec3> points) {
method getDistanceToShape (line 45) | public static double getDistanceToShape(Vec3 point, List<Vec3> points) {
method distBetweenPointAndLine (line 86) | public static double distBetweenPointAndLine(double x, double y, doubl...
method distBetween (line 108) | public static double distBetween(double x, double y, double x1, double...
FILE: src/main/java/weather2/util/WeatherUtilSound.java
class WeatherUtilSound (line 20) | public class WeatherUtilSound {
method init (line 36) | public static void init() {
method playNonMovingSound (line 83) | @OnlyIn(Dist.CLIENT)
method playMovingSound (line 94) | @OnlyIn(Dist.CLIENT)
method playPlayerLockedSound (line 115) | @OnlyIn(Dist.CLIENT)
FILE: src/main/java/weather2/util/WindReader.java
class WindReader (line 14) | public class WindReader {
method getWindAngle (line 15) | public static float getWindAngle(Level world) {
method getWindAngle (line 19) | public static float getWindAngle(Level world, Vec3 pos) {
method getWindSpeed (line 24) | public static float getWindSpeed(Level world) {
method getWindSpeed (line 28) | public static float getWindSpeed(Level world, @Nullable BlockPos pos) {
method getWindSpeed (line 32) | public static float getWindSpeed(Level world, @Nullable BlockPos pos, ...
method getWindSpeedCached (line 37) | public static float getWindSpeedCached(Level world, @Nullable BlockPos...
method getWeatherManagerFor (line 42) | public static WeatherManager getWeatherManagerFor(Level world) {
method getWeatherManagerClient (line 50) | @OnlyIn(Dist.CLIENT)
FILE: src/main/java/weather2/weathersystem/WeatherManager.java
class WeatherManager (line 20) | public abstract class WeatherManager implements IWorldData {
method WeatherManager (line 45) | public WeatherManager(ResourceKey<Level> dimension) {
method getWorld (line 49) | public abstract Level getWorld();
method tick (line 51) | public void tick() {
method getClosestParticleStormByIntensity (line 81) | public WeatherObjectParticleStorm getClosestParticleStormByIntensity(V...
method getClosestParticleStormByIntensity (line 91) | public WeatherObjectParticleStorm getClosestParticleStormByIntensity(V...
method reset (line 119) | public void reset() {
method tickRender (line 135) | public void tickRender(float partialTick) {
method getStormObjects (line 153) | public List<WeatherObject> getStormObjects() {
method getStormObjectByID (line 157) | public StormObject getStormObjectByID(long ID) {
method addStormObject (line 166) | public void addStormObject(WeatherObject so) {
method removeStormObject (line 180) | public void removeStormObject(long ID) {
method getClosestStormAny (line 195) | public StormObject getClosestStormAny(Vec3 parPos, double maxDist) {
method getClosestStorm (line 199) | public StormObject getClosestStorm(Vec3 parPos, double maxDist, int se...
method getClosestStorm (line 203) | public StormObject getClosestStorm(Vec3 parPos, double maxDist, int se...
method isPrecipitatingAt (line 238) | public boolean isPrecipitatingAt(BlockPos pos) {
method isPrecipitatingAt (line 248) | public boolean isPrecipitatingAt(Vec3 parPos) {
method getClosestSandstorm (line 279) | public WeatherObjectSandstormOld getClosestSandstorm(Vec3 parPos, doub...
method getSandstormsAround (line 308) | public List<WeatherObject> getSandstormsAround(Vec3 parPos, double max...
method getStormsAroundForDeflector (line 326) | public List<WeatherObject> getStormsAroundForDeflector(Vec3 parPos, do...
method getStormsAround (line 349) | public List<WeatherObject> getStormsAround(Vec3 parPos, double maxDist) {
method save (line 372) | @Override
method read (line 407) | public void read() {
method getWindManager (line 484) | public WindManager getWindManager() {
method getLookupWeatherBlockDamageDeflector (line 488) | public HashMap<Long, BlockPos> getLookupWeatherBlockDamageDeflector() {
method registerDeflector (line 492) | public void registerDeflector(BlockPos pos) {
method removeDeflector (line 500) | public void removeDeflector(BlockPos pos) {
FILE: src/main/java/weather2/weathersystem/WeatherManagerClient.java
class WeatherManagerClient (line 25) | @OnlyIn(Dist.CLIENT)
method WeatherManagerClient (line 30) | public WeatherManagerClient(ResourceKey<Level> dimension) {
method tick (line 34) | @Override
method getWorld (line 57) | @Override
method nbtSyncFromServer (line 62) | public void nbtSyncFromServer(CompoundTag parNBT) {
FILE: src/main/java/weather2/weathersystem/WeatherManagerServer.java
class WeatherManagerServer (line 38) | public class WeatherManagerServer extends WeatherManager {
method WeatherManagerServer (line 41) | public WeatherManagerServer(ServerLevel world) {
method getWorld (line 46) | @Override
method tick (line 51) | @Override
method findWeatherDeflector (line 223) | public Optional<BlockPos> findWeatherDeflector(BlockPos pos, int range) {
method tickStormBlockBuildup (line 243) | public void tickStormBlockBuildup(StormState stormState, Block block) {
method syncStormRemove (line 275) | public void syncStormRemove(WeatherObject parStorm) {
method syncWindUpdate (line 289) | public void syncWindUpdate(WindManager parManager) {
method tickWeatherCoverage (line 298) | public void tickWeatherCoverage() {
method tryParticleStorm (line 368) | public void tryParticleStorm(Level level, WeatherObjectParticleStorm.S...
method trySpawnParticleStormNearPos (line 415) | public boolean trySpawnParticleStormNearPos(Level world, Vec3 posIn, W...
method trySpawnParticleStormNearPos (line 419) | public boolean trySpawnParticleStormNearPos(Level world, Vec3 posIn, W...
method spawnParticleStorm (line 532) | public void spawnParticleStorm(BlockPos pos, WeatherObjectParticleStor...
method trySpawnStormCloudNearPlayerForLayer (line 543) | public void trySpawnStormCloudNearPlayerForLayer(Player entP, int laye...
method playerJoinedWorldSyncFull (line 595) | public void playerJoinedWorldSyncFull(ServerPlayer entP) {
method syncLightningNew (line 631) | public void syncLightningNew(Entity parEnt, boolean custom) {
method syncBlockParticleNew (line 646) | public void syncBlockParticleNew(BlockPos pos, BlockState state, Weath...
method syncStormNew (line 661) | public void syncStormNew(WeatherObject parStorm) {
method syncStormNew (line 665) | public void syncStormNew(WeatherObject parStorm, @Nullable ServerPlaye...
method syncStormUpdate (line 683) | public void syncStormUpdate(WeatherObject parStorm) {
method syncWeatherVanilla (line 713) | public void syncWeatherVanilla() {
method removeWeatherObjectAndSync (line 725) | public void removeWeatherObjectAndSync(WeatherObject parStorm) {
method clearAllStorms (line 739) | public void clearAllStorms() {
method getBiomeBasedStormSpawnChanceInArea (line 756) | public float getBiomeBasedStormSpawnChanceInArea(BlockPos posCenter) {
FILE: src/main/java/weather2/weathersystem/fog/FogAdjuster.java
class FogAdjuster (line 18) | public class FogAdjuster {
method FogAdjuster (line 66) | public FogAdjuster() {
method initProfiles (line 73) | public void initProfiles(boolean spectator) {
method tickGame (line 85) | public void tickGame(ClientWeatherProxy weather) {
method onFogColors (line 142) | public void onFogColors(ViewportEvent.ComputeFogColor event) {
method onFogRender (line 156) | public void onFogRender(ViewportEvent.RenderFog event) {
method startRandom (line 181) | public void startRandom() {
method startHeatwave (line 196) | public void startHeatwave() {
method startSandstorm (line 203) | public void startSandstorm() {
method startSnowstorm (line 210) | public void startSnowstorm() {
method restoreVanilla (line 217) | public void restoreVanilla() {
method setupNewLerpRates (line 224) | public void setupNewLerpRates() {
method getLerpRate (line 245) | public float getLerpRate(float curVal, float endVal, float fullLerpTic...
method isFogOverriding (line 249) | public boolean isFogOverriding() {
method updateWeatherState (line 258) | public void updateWeatherState() {
method getLerpFraction (line 302) | public float getLerpFraction() {
FILE: src/main/java/weather2/weathersystem/fog/FogProfile.java
class FogProfile (line 5) | public class FogProfile {
method FogProfile (line 13) | public FogProfile(FogProfile profile) {
method FogProfile (line 21) | public FogProfile(Vector3f rgb, float fogStart, float fogEnd) {
method getRgb (line 29) | public Vector3f getRgb() {
method setRgb (line 33) | public void setRgb(Vector3f rgb) {
method getFogStart (line 37) | public float getFogStart() {
method setFogStart (line 41) | public void setFogStart(float fogStart) {
method getFogEnd (line 45) | public float getFogEnd() {
method setFogEnd (line 49) | public void setFogEnd(float fogEnd) {
method getFogStartSky (line 53) | public float getFogStartSky() {
method setFogStartSky (line 57) | public void setFogStartSky(float fogStartSky) {
method getFogEndSky (line 61) | public float getFogEndSky() {
method setFogEndSky (line 65) | public void setFogEndSky(float fogEndSky) {
FILE: src/main/java/weather2/weathersystem/storm/EnumWeatherObjectType.java
type EnumWeatherObjectType (line 7) | public enum EnumWeatherObjectType {
method get (line 13) | public static EnumWeatherObjectType get(int intValue) { return lookup....
FILE: src/main/java/weather2/weathersystem/storm/LightningBoltWeather.java
class LightningBoltWeather (line 33) | public class LightningBoltWeather extends Entity {
method LightningBoltWeather (line 47) | public LightningBoltWeather(EntityType<? extends LightningBoltWeather>...
method LightningBoltWeather (line 55) | public LightningBoltWeather(EntityType<? extends LightningBoltWeather>...
method setVisualOnly (line 60) | public void setVisualOnly(boolean p_20875_) {
method getSoundSource (line 64) | public SoundSource getSoundSource() {
method getCause (line 68) | @Nullable
method setCause (line 73) | public void setCause(@Nullable ServerPlayer p_20880_) {
method powerLightningRod (line 77) | private void powerLightningRod() {
method setDamage (line 86) | public void setDamage(float damage) {
method getDamage (line 90) | public float getDamage() {
method tick (line 94) | public void tick() {
method getStrikePosition (line 145) | private BlockPos getStrikePosition() {
method spawnFire (line 150) | private void spawnFire(int p_20871_) {
method clearCopperOnLightningStrike (line 171) | private static void clearCopperOnLightningStrike(Level p_147151_, Bloc...
method randomWalkCleaningCopper (line 196) | private static void randomWalkCleaningCopper(Level p_147146_, BlockPos...
method randomStepCleaningCopper (line 210) | private static Optional<BlockPos> randomStepCleaningCopper(Level p_147...
method shouldRenderAtSqrDistance (line 225) | public boolean shouldRenderAtSqrDistance(double p_20869_) {
method defineSynchedData (line 230) | protected void defineSynchedData() {
method readAdditionalSaveData (line 233) | protected void readAdditionalSaveData(CompoundTag p_20873_) {
method addAdditionalSaveData (line 236) | protected void addAdditionalSaveData(CompoundTag p_20877_) {
method getBlocksSetOnFire (line 239) | public int getBlocksSetOnFire() {
method getHitEntities (line 243) | public Stream<Entity> getHitEntities() {
FILE: src/main/java/weather2/weathersystem/storm/LightningBoltWeatherNew.java
class LightningBoltWeatherNew (line 33) | public class LightningBoltWeatherNew extends Entity {
method LightningBoltWeatherNew (line 47) | public LightningBoltWeatherNew(EntityType<? extends LightningBoltWeath...
method setVisualOnly (line 55) | public void setVisualOnly(boolean p_20875_) {
method getSoundSource (line 59) | public SoundSource getSoundSource() {
method getCause (line 63) | @Nullable
method setCause (line 68) | public void setCause(@Nullable ServerPlayer p_20880_) {
method powerLightningRod (line 72) | private void powerLightningRod() {
method setDamage (line 81) | public void setDamage(float damage) {
method getDamage (line 85) | public float getDamage() {
method tick (line 89) | public void tick() {
method getStrikePosition (line 151) | private BlockPos getStrikePosition() {
method spawnFire (line 156) | private void spawnFire(int p_20871_) {
method clearCopperOnLightningStrike (line 177) | private static void clearCopperOnLightningStrike(Level p_147151_, Bloc...
method randomWalkCleaningCopper (line 202) | private static void randomWalkCleaningCopper(Level p_147146_, BlockPos...
method randomStepCleaningCopper (line 216) | private static Optional<BlockPos> randomStepCleaningCopper(Level p_147...
method shouldRenderAtSqrDistance (line 231) | public boolean shouldRenderAtSqrDistance(double p_20869_) {
method defineSynchedData (line 236) | protected void defineSynchedData() {
method readAdditionalSaveData (line 239) | protected void readAdditionalSaveData(CompoundTag p_20873_) {
method addAdditionalSaveData (line 242) | protected void addAdditionalSaveData(CompoundTag p_20877_) {
method getBlocksSetOnFire (line 245) | public int getBlocksSetOnFire() {
method getHitEntities (line 249) | public Stream<Entity> getHitEntities() {
FILE: src/main/java/weather2/weathersystem/storm/StormObject.java
class StormObject (line 54) | public class StormObject extends WeatherObject {
method StormObject (line 230) | public StormObject(WeatherManager parManager) {
method initFirstTime (line 248) | public void initFirstTime() {
method isCloudlessStorm (line 274) | public boolean isCloudlessStorm() {
method setCloudlessStorm (line 278) | public void setCloudlessStorm(boolean cloudlessStorm) {
method isPrecipitating (line 282) | public boolean isPrecipitating() {
method setPrecipitating (line 286) | public void setPrecipitating(boolean parVal) {
method isRealStorm (line 290) | public boolean isRealStorm() {
method isTornadoFormingOrGreater (line 294) | public boolean isTornadoFormingOrGreater() {
method isCycloneFormingOrGreater (line 298) | public boolean isCycloneFormingOrGreater() {
method isSpinning (line 302) | public boolean isSpinning() {
method isTropicalCyclone (line 306) | public boolean isTropicalCyclone() {
method isHurricane (line 310) | public boolean isHurricane() {
method read (line 314) | @Override
method write (line 329) | @Override
method nbtSyncFromServer (line 346) | @Override
method nbtSyncForClient (line 435) | @Override
method nbtForIMC (line 524) | public CompoundTag nbtForIMC() {
method tickRender (line 530) | @OnlyIn(Dist.CLIENT)
method setupTornado (line 630) | public void setupTornado() {
method tick (line 664) | public void tick() {
method calculateBaseFormationPos (line 800) | public Vec3 calculateBaseFormationPos() {
method tickMovement (line 830) | public void tickMovement() {
method tickMovementClient (line 1020) | public void tickMovementClient() {
method tickWeatherEvents (line 1026) | public void tickWeatherEvents() {
method trackAndExtinguishEntities (line 1083) | public void trackAndExtinguishEntities() {
method tickProgression (line 1109) | public void tickProgression() {
method featherFallAllNearbyPlayers (line 1553) | public void featherFallAllNearbyPlayers() {
method getWeatherEntityConfigForStorm (line 1562) | public WeatherEntityConfig getWeatherEntityConfigForStorm() {
method stageNext (line 1581) | public void stageNext() {
method stagePrev (line 1593) | public void stagePrev() {
method initRealStorm (line 1598) | public void initRealStorm(Player entP, StormObject stormToAbsorb) {
method rollDiceOnMaxIntensity (line 1638) | public int rollDiceOnMaxIntensity() {
method aimStormAtClosestOrProvidedPlayer (line 1682) | public void aimStormAtClosestOrProvidedPlayer(Player entP) {
method aimAtCoords (line 1693) | public void aimAtCoords(Vec3 vec) {
method aimAwayFromCoords (line 1713) | public void aimAwayFromCoords(Vec3 vec) {
method setNoStorm (line 1728) | public void setNoStorm() {
method tickClient (line 1734) | @OnlyIn(Dist.CLIENT)
method getAdjustedSpeed (line 2331) | public float getAdjustedSpeed() {
method getAdjustedAngle (line 2335) | public float getAdjustedAngle() {
method getAvoidAngleIfTerrainAtOrAheadOfPosition (line 2365) | public float getAvoidAngleIfTerrainAtOrAheadOfPosition(float angle, Ve...
method getRandomNearPlayer (line 2386) | public Player getRandomNearPlayer(Entity entityLineOfSightSource) {
method spinEntityv2 (line 2403) | public void spinEntityv2(Entity entity) {
method getFunnelCenter (line 2496) | public Vec3 getFunnelCenter(Vec3 position) {
method spinObject (line 2507) | public Vec3 spinObject(Vec3 position, Vec3 motion, boolean forPlayer, ...
method spinEntity (line 2584) | public void spinEntity(Object entity1) {
method setVel (line 2834) | public void setVel(Object entity, float f, float f1, float f2)
method spawnFogParticle (line 2841) | @OnlyIn(Dist.CLIENT)
method spawnFogParticle (line 2846) | @OnlyIn(Dist.CLIENT)
method cleanup (line 2934) | @Override
method cleanupClient (line 2950) | @OnlyIn(Dist.CLIENT)
method getTemperatureMCToWeatherSys (line 2964) | public static float getTemperatureMCToWeatherSys(float parOrigVal) {
method addWeatherEffectLightning (line 2972) | public void addWeatherEffectLightning(LightningBoltWeatherNew parEnt, ...
method getUpdateRateForNetwork (line 2977) | @Override
method getPosTop (line 2986) | public Vec3 getPosTop() {
method setupStorm (line 2993) | public void setupStorm(Entity entity) {
method initPositions (line 3013) | public void initPositions(Vec3 pos) {
method calculateTopYBlock (line 3021) | public int calculateTopYBlock() {
method setupTornadoAwayFromPlayersAimAtPlayers (line 3081) | public void setupTornadoAwayFromPlayersAimAtPlayers() {
method setupPlayerControlledTornado (line 3096) | public void setupPlayerControlledTornado(Entity entity) {
method getPlayer (line 3100) | public Player getPlayer() {
method isPlayerControlled (line 3105) | public boolean isPlayerControlled() {
method setPlayerControlled (line 3109) | public void setPlayerControlled(boolean playerControlled) {
method getPlayerControlledTimeLeft (line 3113) | public int getPlayerControlledTimeLeft() {
method setPlayerControlledTimeLeft (line 3117) | public void setPlayerControlledTimeLeft(int playerControlledTimeLeft) {
method isBaby (line 3121) | public boolean isBaby() {
method setBaby (line 3125) | public void setBaby(boolean baby) {
method isPet (line 3129) | public boolean isPet() {
method setPet (line 3133) | public void setPet(boolean pet) {
method isPetGrabsItems (line 3137) | public boolean isPetGrabsItems() {
method setPetGrabsItems (line 3141) | public void setPetGrabsItems(boolean petGrabsItems) {
method isSharknado (line 3145) | public boolean isSharknado() {
method setSharknado (line 3149) | public void setSharknado(boolean sharknado) {
method setAndUpdateTornado (line 3153) | public void setAndUpdateTornado() {
method getTornadoFunnelSimple (line 3162) | public TornadoFunnelSimple getTornadoFunnelSimple() {
method setTornadoFunnelSimple (line 3166) | public void setTornadoFunnelSimple(TornadoFunnelSimple tornadoFunnelSi...
method getAge (line 3170) | public int getAge() {
method setAge (line 3174) | public void setAge(int age) {
method getAgeSinceTornadoTouchdown (line 3178) | public int getAgeSinceTornadoTouchdown() {
method setAgeSinceTornadoTouchdown (line 3182) | public void setAgeSinceTornadoTouchdown(int ageSinceTornadoTouchdown) {
method isBeingDeflectedCached (line 3186) | public boolean isBeingDeflectedCached() {
method setBeingDeflectedCached (line 3190) | public void setBeingDeflectedCached(boolean beingDeflectedCached) {
FILE: src/main/java/weather2/weathersystem/storm/TornadoHelper.java
class TornadoHelper (line 48) | public class TornadoHelper {
class BlockUpdateSnapshot (line 89) | public static class BlockUpdateSnapshot {
method BlockUpdateSnapshot (line 97) | public BlockUpdateSnapshot(ResourceKey<Level> dimension, BlockState ...
method getDimension (line 105) | public ResourceKey<Level> getDimension() {
method setDimension (line 109) | public void setDimension(ResourceKey<Level> dimension) {
method getState (line 113) | public BlockState getState() {
method setState (line 117) | public void setState(BlockState state) {
method getPos (line 121) | public BlockPos getPos() {
method setPos (line 125) | public void setPos(BlockPos pos) {
method isCreateEntityForBlockRemoval (line 129) | public boolean isCreateEntityForBlockRemoval() {
method setCreateEntityForBlockRemoval (line 133) | public void setCreateEntityForBlockRemoval(boolean createEntityForBl...
method getStatePrev (line 137) | public BlockState getStatePrev() {
method setStatePrev (line 141) | public void setStatePrev(BlockState statePrev) {
method TornadoHelper (line 147) | public TornadoHelper(StormObject parStorm) {
method getTornadoBaseSize (line 151) | public int getTornadoBaseSize() {
method tick (line 180) | public void tick(Level parWorld) {
method isNoDigCoord (line 462) | public boolean isNoDigCoord(int x, int y, int z) {
method tryRip (line 479) | public boolean tryRip(Level parWorld, int tryX, int tryY, int tryZ/*, ...
method canGrab (line 538) | public boolean canGrab(Level parWorld, BlockState state, BlockPos pos)
method canGrabEventCheck (line 553) | public boolean canGrabEventCheck(Level world, BlockState state, BlockP...
method canGrabEntity (line 567) | public boolean canGrabEntity(Entity ent) {
method canGrabEntityClient (line 607) | @OnlyIn(Dist.CLIENT)
method forceRotate (line 644) | public boolean forceRotate(Level parWorld)
method forceRotate (line 649) | public boolean forceRotate(Level parWorld, boolean featherFallInstead)
method getDistanceXZ (line 725) | public double getDistanceXZ(Vec3 parVec, double var1, double var3, dou...
method getDistanceXZ (line 733) | public double getDistanceXZ(Entity ent, double var1, double var3, doub...
method soundUpdates (line 741) | @OnlyIn(Dist.CLIENT)
method tryPlaySound (line 815) | public boolean tryPlaySound(String[] sound, int arrIndex, Entity sourc...
method isBlockGrabbingBlocked (line 831) | public boolean isBlockGrabbingBlocked(Level world, BlockState state, B...
method cleanup (line 851) | public void cleanup() {
FILE: src/main/java/weather2/weathersystem/storm/WeatherEntityConfig.java
class WeatherEntityConfig (line 4) | public class WeatherEntityConfig
FILE: src/main/java/weather2/weathersystem/storm/WeatherObject.java
class WeatherObject (line 11) | public class WeatherObject {
method WeatherObject (line 41) | public WeatherObject(WeatherManager parManager) {
method initFirstTime (line 46) | public void initFirstTime() {
method tick (line 50) | public void tick() {
method tickRender (line 54) | @OnlyIn(Dist.CLIENT)
method reset (line 59) | public void reset() {
method remove (line 63) | public void remove() {
method cleanup (line 77) | public void cleanup() {
method cleanupClient (line 81) | @OnlyIn(Dist.CLIENT)
method getUpdateRateForNetwork (line 86) | public int getUpdateRateForNetwork() {
method read (line 90) | public void read() {
method write (line 94) | public void write() {
method nbtSyncFromServer (line 98) | public void nbtSyncFromServer() {
method nbtSyncForClient (line 111) | public void nbtSyncForClient() {
method getNbtCache (line 133) | public CachedNBTTagCompound getNbtCache() {
method setNbtCache (line 137) | public void setNbtCache(CachedNBTTagCompound nbtCache) {
method getSize (line 141) | public int getSize() {
FILE: src/main/java/weather2/weathersystem/storm/WeatherObjectParticleStorm.java
class WeatherObjectParticleStorm (line 25) | public class WeatherObjectParticleStorm extends WeatherObject {
type StormType (line 34) | public enum StormType {
method StormType (line 42) | StormType(String key) {
method getKey (line 46) | public String getKey() {
method WeatherObjectParticleStorm (line 51) | public WeatherObjectParticleStorm(WeatherManager parManager) {
method initStormSpawn (line 57) | public void initStormSpawn(Vec3 pos) {
method canSpawnHere (line 62) | public static boolean canSpawnHere(Level world, BlockPos pos, StormTyp...
method isColdForStorm (line 72) | public static boolean isColdForStorm(Level world, Holder<Biome> biome,...
method isDesert (line 79) | public static boolean isDesert(Holder<Biome> biome, boolean forSpawn) {
method getSize (line 83) | @Override
method tick (line 88) | @Override
method getIntensity (line 116) | public float getIntensity() {
method tickClient (line 126) | @OnlyIn(Dist.CLIENT)
method getBlockForBuildup (line 131) | public Block getBlockForBuildup() {
method tickBlockSandBuildup (line 140) | public void tickBlockSandBuildup() {
method getRandomPosInStorm (line 189) | public Vec3 getRandomPosInStorm() {
method getUpdateRateForNetwork (line 198) | @Override
method nbtSyncForClient (line 203) | @Override
method nbtSyncFromServer (line 213) | @Override
method read (line 224) | @Override
method write (line 233) | @Override
method cleanup (line 247) | @Override
method cleanupClient (line 252) | @OnlyIn(Dist.CLIENT)
method getType (line 258) | public StormType getType() {
method setType (line 262) | public void setType(StormType type) {
FILE: src/main/java/weather2/weathersystem/storm/WeatherObjectSandstormOld.java
class WeatherObjectSandstormOld (line 21) | public class WeatherObjectSandstormOld extends WeatherObject {
method WeatherObjectSandstormOld (line 28) | public WeatherObjectSandstormOld(WeatherManager parManager) {
method initSandstormSpawn (line 34) | public void initSandstormSpawn(Vec3 pos) {
method isDesert (line 39) | public static boolean isDesert(Biome biome) {
method isDesert (line 43) | public static boolean isDesert(Biome biome, boolean forSpawn) {
method getSize (line 49) | public int getSize() {
method tick (line 53) | @Override
method getIntensity (line 76) | public float getIntensity() {
method tickClient (line 86) | @OnlyIn(Dist.CLIENT)
method tickBlockSandBuildup (line 91) | public void tickBlockSandBuildup() {
method getRandomPosInSandstorm (line 130) | public Vec3 getRandomPosInSandstorm() {
method getUpdateRateForNetwork (line 139) | @Override
method nbtSyncForClient (line 144) | @Override
method nbtSyncFromServer (line 152) | @Override
method read (line 160) | @Override
method write (line 169) | @Override
method cleanup (line 183) | @Override
method cleanupClient (line 188) | @OnlyIn(Dist.CLIENT)
FILE: src/main/java/weather2/weathersystem/storm/WeatherTypes.java
class WeatherTypes (line 6) | public class WeatherTypes {
method initWeatherTypes (line 14) | public static void initWeatherTypes() {
FILE: src/main/java/weather2/weathersystem/tornado/ActiveTornadoConfig.java
class ActiveTornadoConfig (line 8) | public class ActiveTornadoConfig {
method serialize (line 18) | public CompoundTag serialize() {
method deserialize (line 29) | public static ActiveTornadoConfig deserialize(CompoundTag tag) {
method getRadiusOfBase (line 40) | public float getRadiusOfBase() {
method setRadiusOfBase (line 44) | public ActiveTornadoConfig setRadiusOfBase(float radiusOfBase) {
method getRadiusIncreasePerLayer (line 49) | public float getRadiusIncreasePerLayer() {
method setRadiusIncreasePerLayer (line 53) | public ActiveTornadoConfig setRadiusIncreasePerLayer(float radiusIncre...
method getHeight (line 58) | public float getHeight() {
method setHeight (line 62) | public ActiveTornadoConfig setHeight(float height) {
method getSpinSpeed (line 67) | public float getSpinSpeed() {
method setSpinSpeed (line 71) | public ActiveTornadoConfig setSpinSpeed(float spinSpeed) {
method getEntityPullDistXZ (line 76) | public float getEntityPullDistXZ() {
method setEntityPullDistXZ (line 80) | public ActiveTornadoConfig setEntityPullDistXZ(float entityPullDistXZ) {
method getEntityPullDistXZForY (line 85) | public float getEntityPullDistXZForY() {
method setEntityPullDistXZForY (line 89) | public ActiveTornadoConfig setEntityPullDistXZForY(float entityPullDis...
FILE: src/main/java/weather2/weathersystem/tornado/CatmullRomSpline.java
class CatmullRomSpline (line 23) | public class CatmullRomSpline<T extends Vector<T>> implements Path<T> {
method calculate (line 31) | public static <T extends Vector<T>> T calculate (final T out, final fl...
method calculate (line 48) | public static <T extends Vector<T>> T calculate (final T out, final in...
method derivative (line 67) | public static <T extends Vector<T>> T derivative (final T out, final f...
method derivative (line 84) | public static <T extends Vector<T>> T derivative (final T out, final i...
method CatmullRomSpline (line 106) | public CatmullRomSpline () {
method CatmullRomSpline (line 109) | public CatmullRomSpline (final T[] controlPoints, final boolean contin...
method set (line 113) | public CatmullRomSpline set (final T[] controlPoints, final boolean co...
method valueAt (line 123) | @Override
method valueAt (line 133) | public T valueAt (final T out, final int span, final float u) {
method derivativeAt (line 137) | @Override
method derivativeAt (line 147) | public T derivativeAt (final T out, final int span, final float u) {
method nearest (line 152) | public int nearest (final T in) {
method nearest (line 157) | public int nearest (final T in, int start, final int count) {
method approximate (line 173) | @Override
method approximate (line 178) | public float approximate (final T in, int start, final int count) {
method approximate (line 182) | public float approximate (final T in, final int near) {
method locate (line 209) | @Override
method approxLength (line 214) | @Override
FILE: src/main/java/weather2/weathersystem/tornado/CubicBezierCurve.java
class CubicBezierCurve (line 10) | public class CubicBezierCurve {
method CubicBezierCurve (line 19) | public CubicBezierCurve(Vector3f[] pointsVector) {
method getValue (line 30) | public Vector3f getValue(float t) {
method getValueTest (line 47) | public Vector3f getValueTest(float t) {
method getValueTest10 (line 67) | public Vector3f getValueTest10(float t) {
method calcNewVector (line 125) | private Vector3f calcNewVector(float scaler, Vector3f base) {
FILE: src/main/java/weather2/weathersystem/tornado/Path.java
type Path (line 21) | public interface Path<T> {
method derivativeAt (line 22) | T derivativeAt (T out, float t);
method valueAt (line 25) | T valueAt (T out, float t);
method approximate (line 30) | float approximate (T v);
method locate (line 35) | float locate (T v);
method approxLength (line 41) | float approxLength (int samples);
FILE: src/main/java/weather2/weathersystem/tornado/TornadoFunnel.java
class TornadoFunnel (line 23) | public class TornadoFunnel {
class FunnelPiece (line 37) | static class FunnelPiece {
method TornadoFunnel (line 54) | public TornadoFunnel() {
method tickGame (line 58) | public void tickGame() {
method tickGameTestCreate (line 70) | private void tickGameTestCreate() {
method tickUpdateFunnel (line 193) | private void tickUpdateFunnel() {
method addPieceToEnd (line 368) | public void addPieceToEnd(FunnelPiece piece) {
method distanceTo (line 372) | public double distanceTo(Vector3d vec1, Vector3d p_82555_) {
FILE: src/main/java/weather2/weathersystem/tornado/TornadoManagerTodoRenameMe.java
class TornadoManagerTodoRenameMe (line 21) | public class TornadoManagerTodoRenameMe {
method tick (line 37) | public void tick(Level world) {
method getDistance (line 351) | public float getDistance(Vector3f vec1, Vector3f vec2) {
method yawPitch (line 364) | public Vec2 yawPitch(Vector3f pos2, Vector3f pos1) {
method getCurveValue (line 388) | public Vector3f getCurveValue(float val) {
FILE: src/main/java/weather2/weathersystem/tornado/Vector.java
type Vector (line 22) | public interface Vector<T extends Vector<T>> {
method cpy (line 24) | T cpy ();
method len (line 27) | float len ();
method len2 (line 32) | float len2 ();
method limit (line 37) | T limit (float limit);
method limit2 (line 45) | T limit2 (float limit2);
method setLength (line 50) | T setLength (float len);
method setLength2 (line 58) | T setLength2 (float len2);
method clamp (line 64) | T clamp (float min, float max);
method set (line 69) | T set (T v);
method sub (line 74) | T sub (T v);
method nor (line 78) | T nor ();
method add (line 83) | T add (T v);
method dot (line 87) | float dot (T v);
method scl (line 92) | T scl (float scalar);
method scl (line 96) | T scl (T v);
method dst (line 100) | float dst (T v);
method dst2 (line 106) | float dst2 (T v);
method lerp (line 113) | T lerp (T target, float alpha);
method setToRandomDirection (line 117) | T setToRandomDirection ();
method isUnit (line 120) | boolean isUnit ();
method isUnit (line 123) | boolean isUnit (final float margin);
method isZero (line 126) | boolean isZero ();
method isZero (line 129) | boolean isZero (final float margin);
method isOnLine (line 132) | boolean isOnLine (T other, float epsilon);
method isOnLine (line 135) | boolean isOnLine (T other);
method isCollinear (line 139) | boolean isCollinear (T other, float epsilon);
method isCollinear (line 143) | boolean isCollinear (T other);
method isCollinearOpposite (line 147) | boolean isCollinearOpposite (T other, float epsilon);
method isCollinearOpposite (line 151) | boolean isCollinearOpposite (T other);
method isPerpendicular (line 154) | boolean isPerpendicular (T other);
method isPerpendicular (line 158) | boolean isPerpendicular (T other, float epsilon);
method hasSameDirection (line 162) | boolean hasSameDirection (T other);
method hasOppositeDirection (line 166) | boolean hasOppositeDirection (T other);
method epsilonEquals (line 172) | boolean epsilonEquals (T other, float epsilon);
method mulAdd (line 177) | T mulAdd (T v, float scalar);
method mulAdd (line 182) | T mulAdd (T v, T mulVec);
method setZero (line 186) | T setZero ();
FILE: src/main/java/weather2/weathersystem/tornado/simple/Layer.java
class Layer (line 13) | public class Layer {
method Layer (line 22) | public Layer(Vec3 pos) {
method initClient (line 30) | @OnlyIn(Dist.CLIENT)
method getListParticles (line 36) | @OnlyIn(Dist.CLIENT)
method setListParticles (line 41) | @OnlyIn(Dist.CLIENT)
method getListParticlesExtra (line 46) | @OnlyIn(Dist.CLIENT)
method setListParticlesExtra (line 51) | @OnlyIn(Dist.CLIENT)
method getPos (line 56) | public Vec3 getPos() {
method setPos (line 60) | public void setPos(Vec3 pos) {
method getRotation (line 64) | public float getRotation() {
method setRotation (line 68) | public void setRotation(float rotation) {
FILE: src/main/java/weather2/weathersystem/tornado/simple/TornadoFunnelSimple.java
class TornadoFunnelSimple (line 27) | public class TornadoFunnelSimple {
method TornadoFunnelSimple (line 45) | public TornadoFunnelSimple(ActiveTornadoConfig config, StormObject sto...
method init (line 51) | public void init() {
method tick (line 55) | public void tick() {
method tickClient (line 149) | @OnlyIn(Dist.CLIENT)
method cleanupList (line 379) | public void cleanupList(List<PivotingParticle> list, int particlesPerL...
method createParticle (line 393) | @OnlyIn(Dist.CLIENT)
method createParticleDebris (line 426) | @OnlyIn(Dist.CLIENT)
method getPosTop (line 463) | public Vec3 getPosTop() {
method getStormObject (line 468) | public StormObject getStormObject() {
method setStormObject (line 472) | public void setStormObject(StormObject stormObject) {
method cleanup (line 476) | public void cleanup() {
method cleanupClient (line 483) | public void cleanupClient() {
method fadeOut (line 492) | public void fadeOut() {
method disperseParticleSmoothly (line 501) | public void disperseParticleSmoothly(PivotingParticle pivotingParticle...
method cleanupClientQuick (line 519) | public void cleanupClientQuick() {
method getConfig (line 528) | public ActiveTornadoConfig getConfig() {
method setConfig (line 532) | public void setConfig(ActiveTornadoConfig config) {
FILE: src/main/java/weather2/weathersystem/wind/WindInfoCache.java
class WindInfoCache (line 3) | public class WindInfoCache {
FILE: src/main/java/weather2/weathersystem/wind/WindManager.java
class WindManager (line 30) | public class WindManager {
method WindManager (line 78) | public WindManager(WeatherManager parManager) {
method getWindSpeed (line 86) | public float getWindSpeed() {
method getWindSpeed (line 90) | public float getWindSpeed(@Nullable BlockPos pos) {
method getWindSpeed (line 94) | public float getWindSpeed(@Nullable BlockPos pos, float extraHeightAmp...
method getWindSpeedPositional (line 107) | public float getWindSpeedPositional(BlockPos pos) {
method getWindSpeedPositional (line 111) | public float getWindSpeedPositional(BlockPos pos, float extraHeightAmp...
method getWindSpeedPositional (line 124) | public float getWindSpeedPositional(BlockPos pos, float extraHeightAmp...
method startHighWindEvent (line 160) | public void startHighWindEvent() {
method isHighWindEventActive (line 164) | public boolean isHighWindEventActive() {
method stopHighWindEvent (line 168) | public void stopHighWindEvent() {
method startLowWindEvent (line 172) | public void startLowWindEvent() {
method stopLowWindEvent (line 176) | public void stopLowWindEvent() {
method getWindSpeedForGusts (line 180) | public float getWindSpeedForGusts() {
method getWindSpeedForClouds (line 184) | public float getWindSpeedForClouds() {
method getWindAngle (line 188) | public float getWindAngle(Vec3 pos) {
method getWindAngleForEvents (line 203) | public float getWindAngleForEvents() {
method getWindAngleForEvents (line 207) | public float getWindAngleForEvents(Vec3 pos) {
method getWindAngleForGusts (line 222) | public float getWindAngleForGusts() {
method getWindAngleForClouds (line 231) | public float getWindAngleForClouds() {
method setWindTimeGust (line 235) | public void setWindTimeGust(int time) {
method setWindTimeEvent (line 239) | public void setWindTimeEvent(int parVal) {
method tick (line 245) | public void tick() {
method tickClient (line 421) | @OnlyIn(Dist.CLIENT)
method getEventSpeedFactor (line 462) | public float getEventSpeedFactor(double dist, double maxDist) {
method getWindInfoCacheForChunk (line 466) | public WindInfoCache getWindInfoCacheForChunk(BlockPos blockPos, boole...
method getCachedWindSpeedForHeight (line 481) | public float getCachedWindSpeedForHeight(BlockPos blockPos, float extr...
method getCachedWindSpeedEventForChunkPos (line 490) | public float getCachedWindSpeedEventForChunkPos(BlockPos blockPos) {
method calculateWindSpeedEventForPos (line 499) | public float calculateWindSpeedEventForPos(BlockPos pos) {
method getCachedAverageChunkHeightAround (line 510) | public int getCachedAverageChunkHeightAround(BlockPos blockPos) {
method calculateAverageChunkHeightAround (line 526) | public int calculateAverageChunkHeightAround(BlockPos chunkPos) {
method getWindSpeedAmplifierForHeight (line 561) | public float getWindSpeedAmplifierForHeight(int height, int averageHei...
method applyWindForceNew (line 574) | public void applyWindForceNew(Object ent, float multiplier, float maxS...
method applyWindForceNew (line 590) | public void applyWindForceNew(Object ent, float multiplier, float maxS...
method applyWindForceImpl (line 604) | public Vec3 applyWindForceImpl(Vec3 pos, Vec3 motion, float weight, fl...
method nbtSyncForClient (line 653) | public CompoundTag nbtSyncForClient() {
method nbtSyncFromServer (line 672) | public void nbtSyncFromServer(CompoundTag parNBT) {
method getWindForce (line 686) | public Vec3 getWindForce(@Nullable BlockPos pos) {
method syncData (line 694) | public void syncData() {
method reset (line 700) | public void reset() {
method read (line 704) | public void read(CompoundTag data) {
method write (line 720) | public CompoundTag write(CompoundTag data) {
method getWindSpeedPerlinNoise (line 738) | public float getWindSpeedPerlinNoise(Vec3 pos) {
Condensed preview — 283 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,177K chars).
[
{
"path": ".gitattributes",
"chars": 256,
"preview": "# Disable autocrlf on generated files, they always generate with LF\n# Add any extra files or paths here to make git stop"
},
{
"path": ".github/workflows/gradle.yml",
"chars": 1010,
"preview": "name: Java CI with Gradle\n\non: [push]\njobs:\n\n jdk17:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout reposi"
},
{
"path": ".gitignore",
"chars": 206,
"preview": "# eclipse\nbin\n*.launch\n.settings\n.metadata\n.classpath\n.project\n\n# idea\nout\n*.ipr\n*.iws\n*.iml\n.idea\n\n# gradle\nbuild\n.grad"
},
{
"path": "CONTRIBUTING.md",
"chars": 89,
"preview": "## Pull Requests\n\n#### New Pull Requests are not accepted right now, and will be closed.\n"
},
{
"path": "CREDITS.txt",
"chars": 3317,
"preview": "Minecraft Forge: Credits/Thank You\n\nForge is a set of tools and modifications to the Minecraft base game code to assist "
},
{
"path": "LICENSE.txt",
"chars": 27606,
"preview": "Unless noted below, Minecraft Forge, Forge Mod Loader, and all \nparts herein are licensed under the terms of the LGPL 2."
},
{
"path": "README.txt",
"chars": 2297,
"preview": "\nSource installation information for modders\n-------------------------------------------\nThis code follows the Minecraft"
},
{
"path": "build.gradle",
"chars": 12704,
"preview": "buildscript {\n repositories {\n maven {\n name = 'sponge'\n url = 'https://repo.spongepower"
},
{
"path": "changelog.txt",
"chars": 3264,
"preview": "Build: 1.18.1-39.0.5 - Mon Dec 13 21:58:30 GMT 2021\n\tpupnewfster:\n\t\tAdd RenderArmEvent to make overriding just the arm r"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 223,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "gradle.properties",
"chars": 3438,
"preview": "# Sets default memory used for gradle commands. Can be overridden by user or command line properties.\n# This is required"
},
{
"path": "gradlew",
"chars": 8474,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "gradlew.bat",
"chars": 2776,
"preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
},
{
"path": "settings.gradle",
"chars": 277,
"preview": "pluginManagement {\n repositories {\n gradlePluginPortal()\n maven {\n name = 'MinecraftForge'\n "
},
{
"path": "src/generated/resources/.cache/0d0f48ca72ebc11ea3eaf67230fd125a3c581fa7",
"chars": 149,
"preview": "// 1.20.1\t2023-11-22T02:08:00.197677\tatlases generator for coroutil\n74f8b853ba67f301962a10de1f0c163cbd8a8879 assets/mine"
},
{
"path": "src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d",
"chars": 791,
"preview": "// 1.20.1\t2023-11-23T22:56:39.0222298\tLoot Tables\nc8c5ce560e926e54e54807bfa8292631975278c8 data/weather2/loot_tables/blo"
},
{
"path": "src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e",
"chars": 1675,
"preview": "// 1.20.1\t2023-11-23T15:40:45.726425\tRecipes\na6fcf55b00f782cb61ea7ff8c36947cc71d1b6eb data/weather2/advancements/recipes"
},
{
"path": "src/generated/resources/.cache/f991d9ad226694c30732bf45648e031ffa7d50dc",
"chars": 147,
"preview": "// 1.20.1\t2023-11-17T01:47:33.0547988\tatlases generator for weather2\n8b58f99c389a93e757d0e4e05efaaa16ce22dd8c assets/min"
},
{
"path": "src/generated/resources/assets/minecraft/atlases/blocks.json",
"chars": 1301,
"preview": "{\n \"sources\": [\n {\n \"type\": \"minecraft:single\",\n \"resource\": \"weather2:blocks/tornado_siren\"\n },\n {\n"
},
{
"path": "src/generated/resources/assets/minecraft/atlases/particles.json",
"chars": 1532,
"preview": "{\n \"sources\": [\n {\n \"type\": \"minecraft:single\",\n \"resource\": \"coroutil:particles/white\"\n },\n {\n "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/anemometer.json",
"chars": 637,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_the_recipe\": {\n \"conditions\": {\n \"recipe\": "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/sand_layer.json",
"chars": 614,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_sand\": {\n \"conditions\": {\n \"items\": [\n "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/tornado_sensor.json",
"chars": 645,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_the_recipe\": {\n \"conditions\": {\n \"recipe\": "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/tornado_siren.json",
"chars": 643,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_sensor_item\": {\n \"conditions\": {\n \"items\": "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/weather_deflector.json",
"chars": 651,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_the_recipe\": {\n \"conditions\": {\n \"recipe\": "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/weather_forecast.json",
"chars": 649,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_the_recipe\": {\n \"conditions\": {\n \"recipe\": "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/weather_item.json",
"chars": 630,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_redstone\": {\n \"conditions\": {\n \"items\": [\n "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/wind_turbine.json",
"chars": 635,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_the_recipe\": {\n \"conditions\": {\n \"recipe\": "
},
{
"path": "src/generated/resources/data/weather2/advancements/recipes/misc/wind_vane.json",
"chars": 635,
"preview": "{\n \"parent\": \"minecraft:recipes/root\",\n \"criteria\": {\n \"has_the_recipe\": {\n \"conditions\": {\n \"recipe\": "
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/anemometer.json",
"chars": 386,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/sand_layer.json",
"chars": 386,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/tornado_sensor.json",
"chars": 394,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/tornado_siren.json",
"chars": 392,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/weather_deflector.json",
"chars": 400,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/weather_forecast.json",
"chars": 398,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/wind_turbine.json",
"chars": 390,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/loot_tables/blocks/wind_vane.json",
"chars": 384,
"preview": "{\n \"type\": \"minecraft:block\",\n \"pools\": [\n {\n \"bonus_rolls\": 0.0,\n \"conditions\": [\n {\n \"c"
},
{
"path": "src/generated/resources/data/weather2/recipes/anemometer.json",
"chars": 321,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/generated/resources/data/weather2/recipes/sand_layer.json",
"chars": 277,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:sand\"\n "
},
{
"path": "src/generated/resources/data/weather2/recipes/tornado_sensor.json",
"chars": 380,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/generated/resources/data/weather2/recipes/tornado_siren.json",
"chars": 381,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/generated/resources/data/weather2/recipes/weather_deflector.json",
"chars": 383,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/generated/resources/data/weather2/recipes/weather_forecast.json",
"chars": 379,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/generated/resources/data/weather2/recipes/weather_item.json",
"chars": 377,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/generated/resources/data/weather2/recipes/wind_turbine.json",
"chars": 543,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:diamond\"\n "
},
{
"path": "src/generated/resources/data/weather2/recipes/wind_vane.json",
"chars": 320,
"preview": "{\n \"type\": \"minecraft:crafting_shaped\",\n \"category\": \"misc\",\n \"key\": {\n \"D\": {\n \"item\": \"minecraft:redstone\"\n"
},
{
"path": "src/main/java/extendedrenderer/ExtendedRenderer.java",
"chars": 108,
"preview": "package extendedrenderer;\n\npublic class ExtendedRenderer {\n\n public static String modid = \"coroutil\";\n\n}\n"
},
{
"path": "src/main/java/extendedrenderer/ParticleManagerExtended.java",
"chars": 16442,
"preview": "package extendedrenderer;\n\nimport com.google.common.collect.*;\nimport com.mojang.blaze3d.systems.RenderSystem;\nimport co"
},
{
"path": "src/main/java/extendedrenderer/ParticleRegistry2ElectricBubbleoo.java",
"chars": 2057,
"preview": "package extendedrenderer;\n\nimport weather2.DeferredHelper;\nimport net.minecraft.client.Minecraft;\nimport net.minecraft.c"
},
{
"path": "src/main/java/extendedrenderer/WeatherSpriteSourceProvider.java",
"chars": 891,
"preview": "/*\n * Copyright (c) Forge Development LLC and contributors\n * SPDX-License-Identifier: LGPL-2.1-only\n */\n\npackage extend"
},
{
"path": "src/main/java/extendedrenderer/particle/ParticleRegistry.java",
"chars": 12576,
"preview": "package extendedrenderer.particle;\n\nimport extendedrenderer.ExtendedRenderer;\nimport net.minecraft.client.renderer.textu"
},
{
"path": "src/main/java/extendedrenderer/particle/behavior/ParticleBehaviorFog.java",
"chars": 4604,
"preview": "package extendedrenderer.particle.behavior;\n\nimport extendedrenderer.particle.entity.EntityRotFX;\nimport net.minecraft.w"
},
{
"path": "src/main/java/extendedrenderer/particle/behavior/ParticleBehaviorSandstorm.java",
"chars": 6259,
"preview": "package extendedrenderer.particle.behavior;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport extendedrenderer.par"
},
{
"path": "src/main/java/extendedrenderer/particle/behavior/ParticleBehaviors.java",
"chars": 24266,
"preview": "package extendedrenderer.particle.behavior;\n\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Random;"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/DustEmitter.java",
"chars": 797,
"preview": "package extendedrenderer.particle.entity;\n\nimport extendedrenderer.particle.ParticleRegistry;\nimport net.minecraft.clien"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/EntityRotFX.java",
"chars": 33487,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.corosus.coroutil.u"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/ParticleCrossSection.java",
"chars": 4904,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.mojang.blaze3d.vertex.VertexConsumer;\nimport com.mojang.math.Axis;"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/ParticleCube.java",
"chars": 6711,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.corosus.coroutil.util.CULog;\nimport com.corosus.coroutil.util.Coro"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/ParticleEmitter.java",
"chars": 754,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.mojang.blaze3d.vertex.VertexConsumer;\nimport net.minecraft.client."
},
{
"path": "src/main/java/extendedrenderer/particle/entity/ParticleTexExtraRender.java",
"chars": 13580,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.corosus.coroutil.u"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/ParticleTexFX.java",
"chars": 1069,
"preview": "package extendedrenderer.particle.entity;\n\nimport net.minecraft.client.renderer.texture.TextureAtlasSprite;\nimport net.m"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/ParticleTexLeafColor.java",
"chars": 5080,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.corosus.coroutil.util.CoroUtilColor;\nimport com.corosus.coroutil.u"
},
{
"path": "src/main/java/extendedrenderer/particle/entity/PivotingParticle.java",
"chars": 2690,
"preview": "package extendedrenderer.particle.entity;\n\nimport com.mojang.blaze3d.vertex.VertexConsumer;\nimport net.minecraft.client."
},
{
"path": "src/main/java/extendedrenderer/particle/entity/WaterDropParticleImpl.java",
"chars": 563,
"preview": "package extendedrenderer.particle.entity;\n\nimport net.minecraft.client.multiplayer.ClientLevel;\nimport net.minecraft.cli"
},
{
"path": "src/main/java/weather2/ClientRegistry.java",
"chars": 2078,
"preview": "package weather2;\n\nimport net.minecraft.client.renderer.entity.EntityRenderers;\nimport net.minecraftforge.api.distmarker"
},
{
"path": "src/main/java/weather2/ClientTickHandler.java",
"chars": 5780,
"preview": "package weather2;\n\nimport com.corosus.coroutil.util.CULog;\nimport extendedrenderer.ParticleManagerExtended;\nimport net.m"
},
{
"path": "src/main/java/weather2/ClientWeatherHelper.java",
"chars": 6123,
"preview": "package weather2;\n\nimport com.corosus.coroutil.util.CULog;\nimport net.minecraft.client.Minecraft;\nimport net.minecraft.w"
},
{
"path": "src/main/java/weather2/ClientWeatherProxy.java",
"chars": 5065,
"preview": "package weather2;\n\nimport net.minecraft.world.level.biome.Biome;\nimport weather2.datatypes.PrecipitationType;\nimport net"
},
{
"path": "src/main/java/weather2/DeferredHelper.java",
"chars": 8627,
"preview": "package weather2;\n\nimport java.lang.invoke.MethodHandle;\nimport java.lang.invoke.MethodHandles;\nimport java.lang.reflect"
},
{
"path": "src/main/java/weather2/EntityRegistry.java",
"chars": 1480,
"preview": "package weather2;\n\nimport net.minecraft.world.entity.EntityType;\nimport net.minecraft.world.entity.MobCategory;\nimport n"
},
{
"path": "src/main/java/weather2/EventHandlerForge.java",
"chars": 6094,
"preview": "package weather2;\n\nimport com.corosus.coroutil.util.CULog;\nimport com.corosus.coroutil.util.CoroUtilCompatibility;\nimpor"
},
{
"path": "src/main/java/weather2/IWindHandler.java",
"chars": 112,
"preview": "package weather2;\n\npublic interface IWindHandler {\n\t\n\tfloat getWindWeight();\n\t\n\tint getParticleDecayExtra();\n\n}\n"
},
{
"path": "src/main/java/weather2/IWorldData.java",
"chars": 132,
"preview": "package weather2;\n\nimport net.minecraft.nbt.CompoundTag;\n\npublic interface IWorldData {\n\n CompoundTag save(CompoundTa"
},
{
"path": "src/main/java/weather2/PacketNBTFromClient.java",
"chars": 2430,
"preview": "package weather2;\n\nimport net.minecraft.nbt.CompoundTag;\nimport net.minecraft.network.FriendlyByteBuf;\nimport net.minecr"
},
{
"path": "src/main/java/weather2/PacketNBTFromServer.java",
"chars": 2044,
"preview": "package weather2;\n\nimport net.minecraft.nbt.CompoundTag;\nimport net.minecraft.network.FriendlyByteBuf;\nimport net.minecr"
},
{
"path": "src/main/java/weather2/PerlinNoiseHelper.java",
"chars": 2529,
"preview": "package weather2;\n\nimport com.mojang.serialization.Codec;\nimport com.mojang.serialization.codecs.RecordCodecBuilder;\nimp"
},
{
"path": "src/main/java/weather2/ServerTickHandler.java",
"chars": 8068,
"preview": "package weather2;\n\nimport com.corosus.coroutil.util.CULog;\nimport com.corosus.modconfig.ConfigMod;\nimport it.unimi.dsi.f"
},
{
"path": "src/main/java/weather2/ServerWeatherProxy.java",
"chars": 1044,
"preview": "package weather2;\n\nimport net.minecraft.server.level.ServerLevel;\nimport weather2.datatypes.StormState;\nimport weather2."
},
{
"path": "src/main/java/weather2/SoundRegistry.java",
"chars": 2208,
"preview": "package weather2;\n\nimport java.util.HashMap;\n\nimport net.minecraft.resources.ResourceLocation;\nimport net.minecraft.soun"
},
{
"path": "src/main/java/weather2/Weather.java",
"chars": 8792,
"preview": "package weather2;\n\nimport com.corosus.coroutil.util.CULog;\nimport com.corosus.modconfig.ConfigMod;\nimport com.corosus.mo"
},
{
"path": "src/main/java/weather2/WeatherBlocks.java",
"chars": 6235,
"preview": "package weather2;\n\nimport net.minecraft.world.entity.ai.village.poi.PoiType;\nimport net.minecraft.world.item.BlockItem;\n"
},
{
"path": "src/main/java/weather2/WeatherItems.java",
"chars": 2380,
"preview": "package weather2;\n\nimport net.minecraft.world.item.BlockItem;\nimport net.minecraft.world.item.Item;\nimport net.minecraft"
},
{
"path": "src/main/java/weather2/WeatherNetworking.java",
"chars": 1956,
"preview": "package weather2;\n\nimport net.minecraft.network.FriendlyByteBuf;\nimport net.minecraft.resources.ResourceLocation;\nimport"
},
{
"path": "src/main/java/weather2/WeatherTab.java",
"chars": 565,
"preview": "package weather2;\n\nimport net.minecraft.world.item.CreativeModeTab;\nimport net.minecraft.world.item.ItemStack;\nimport ne"
},
{
"path": "src/main/java/weather2/WorldNBTData.java",
"chars": 916,
"preview": "package weather2;\n\nimport net.minecraft.nbt.CompoundTag;\nimport net.minecraft.world.level.saveddata.SavedData;\n\npublic c"
},
{
"path": "src/main/java/weather2/block/AnemometerBlock.java",
"chars": 3055,
"preview": "package weather2.block;\n\nimport net.minecraft.ChatFormatting;\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.c"
},
{
"path": "src/main/java/weather2/block/DeflectorBlock.java",
"chars": 1780,
"preview": "package weather2.block;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.world.level.Level;\nimport net.minecraf"
},
{
"path": "src/main/java/weather2/block/ForecastBlock.java",
"chars": 3050,
"preview": "package weather2.block;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.network.chat.Component;\nimport net.min"
},
{
"path": "src/main/java/weather2/block/SandLayerBlock.java",
"chars": 5300,
"preview": "package weather2.block;\n\nimport net.minecraft.world.level.block.Block;\nimport net.minecraft.world.level.block.state.Bloc"
},
{
"path": "src/main/java/weather2/block/SensorBlock.java",
"chars": 3727,
"preview": "package weather2.block;\n\nimport net.minecraft.ChatFormatting;\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.c"
},
{
"path": "src/main/java/weather2/block/SirenBlock.java",
"chars": 1291,
"preview": "package weather2.block;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.world.level.Level;\nimport net.minecraf"
},
{
"path": "src/main/java/weather2/block/WeatherMachineBlock.java",
"chars": 1392,
"preview": "package weather2.block;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.world.level.Level;\nimport net.minecraf"
},
{
"path": "src/main/java/weather2/block/WindTurbineBlock.java",
"chars": 2936,
"preview": "package weather2.block;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.network.chat.Component;\nimport net.min"
},
{
"path": "src/main/java/weather2/block/WindVaneBlock.java",
"chars": 2997,
"preview": "package weather2.block;\n\nimport net.minecraft.ChatFormatting;\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.c"
},
{
"path": "src/main/java/weather2/blockentity/AnemometerBlockEntity.java",
"chars": 2286,
"preview": "package weather2.blockentity;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.nbt.CompoundTag;\nimport net.mine"
},
{
"path": "src/main/java/weather2/blockentity/DeflectorBlockEntity.java",
"chars": 1561,
"preview": "package weather2.blockentity;\n\nimport com.corosus.coroutil.util.CULog;\nimport net.minecraft.core.BlockPos;\nimport net.mi"
},
{
"path": "src/main/java/weather2/blockentity/SensorBlockEntity.java",
"chars": 1981,
"preview": "package weather2.blockentity;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.nbt.CompoundTag;\nimport net.mine"
},
{
"path": "src/main/java/weather2/blockentity/SirenBlockEntity.java",
"chars": 3291,
"preview": "package weather2.blockentity;\n\nimport com.corosus.coroutil.util.CoroUtilMisc;\nimport net.minecraft.core.BlockPos;\nimport"
},
{
"path": "src/main/java/weather2/blockentity/WeatherMachineBlockEntity.java",
"chars": 600,
"preview": "package weather2.blockentity;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.world.level.Level;\nimport net.mi"
},
{
"path": "src/main/java/weather2/blockentity/WindTurbineBlockEntity.java",
"chars": 5000,
"preview": "package weather2.blockentity;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.core.Direction;\nimport net.minec"
},
{
"path": "src/main/java/weather2/blockentity/WindVaneBlockEntity.java",
"chars": 2575,
"preview": "package weather2.blockentity;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.nbt.CompoundTag;\nimport net.mine"
},
{
"path": "src/main/java/weather2/client/MovingSoundStreamingSource.java",
"chars": 2862,
"preview": "package weather2.client;\n\nimport com.corosus.coroutil.util.CULog;\nimport net.minecraft.client.Minecraft;\nimport net.mine"
},
{
"path": "src/main/java/weather2/client/SceneEnhancer.java",
"chars": 60408,
"preview": "package weather2.client;\n\nimport com.corosus.coroutil.config.ConfigCoroUtil;\nimport com.corosus.coroutil.util.*;\nimport "
},
{
"path": "src/main/java/weather2/client/entity/model/AnemometerModel.java",
"chars": 5403,
"preview": "package weather2.client.entity.model;// Made with Blockbench 4.8.3\n// Exported for Minecraft version 1.17 or later with "
},
{
"path": "src/main/java/weather2/client/entity/model/WindTurbineModel.java",
"chars": 4049,
"preview": "package weather2.client.entity.model;// Made with Blockbench 4.8.3\n// Exported for Minecraft version 1.17 or later with "
},
{
"path": "src/main/java/weather2/client/entity/model/WindVaneModel.java",
"chars": 6436,
"preview": "package weather2.client.entity.model;// Made with Blockbench 4.8.3\n// Exported for Minecraft version 1.17 or later with "
},
{
"path": "src/main/java/weather2/client/entity/particle/ParticleHail.java",
"chars": 1119,
"preview": "package weather2.client.entity.particle;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.corosus.coroutil.ut"
},
{
"path": "src/main/java/weather2/client/entity/particle/ParticleSandstorm.java",
"chars": 917,
"preview": "package weather2.client.entity.particle;\n\nimport net.minecraft.client.Camera;\nimport net.minecraft.client.renderer.textu"
},
{
"path": "src/main/java/weather2/client/entity/render/LightningBoltWeatherNewRenderer.java",
"chars": 4672,
"preview": "package weather2.client.entity.render;\n\nimport com.mojang.blaze3d.vertex.PoseStack;\nimport com.mojang.blaze3d.vertex.Ver"
},
{
"path": "src/main/java/weather2/client/tile/AnemometerEntityRenderer.java",
"chars": 4434,
"preview": "package weather2.client.tile;\n\nimport com.google.common.collect.Maps;\nimport com.mojang.blaze3d.vertex.PoseStack;\nimport"
},
{
"path": "src/main/java/weather2/client/tile/WindTurbineEntityRenderer.java",
"chars": 3926,
"preview": "package weather2.client.tile;\n\nimport com.google.common.collect.Maps;\nimport com.mojang.blaze3d.vertex.PoseStack;\nimport"
},
{
"path": "src/main/java/weather2/client/tile/WindVaneEntityRenderer.java",
"chars": 4497,
"preview": "package weather2.client.tile;\n\nimport com.google.common.collect.Maps;\nimport com.mojang.blaze3d.vertex.PoseStack;\nimport"
},
{
"path": "src/main/java/weather2/command/CommandWeather2Client.java",
"chars": 8273,
"preview": "package weather2.command;\n\nimport com.corosus.coroutil.util.CULog;\nimport com.corosus.modconfig.ConfigMod;\nimport com.mo"
},
{
"path": "src/main/java/weather2/command/WeatherCommand.java",
"chars": 16738,
"preview": "package weather2.command;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.mojang.brigadier.Command;\nimport c"
},
{
"path": "src/main/java/weather2/config/ClientConfigData.java",
"chars": 2222,
"preview": "package weather2.config;\n\nimport net.minecraft.nbt.CompoundTag;\n\n/**\n * Used for anything that needs to be used on both "
},
{
"path": "src/main/java/weather2/config/ConfigDebug.java",
"chars": 852,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.IConfigCategory;\nimport weather2.Weather;\n\nimport java.io.File;\n\n"
},
{
"path": "src/main/java/weather2/config/ConfigFoliage.java",
"chars": 786,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.IConfigCategory;\nimport weather2.Weather;\n\nimport java.io.File;\n\n"
},
{
"path": "src/main/java/weather2/config/ConfigMisc.java",
"chars": 6016,
"preview": "package weather2.config;\n\nimport java.io.File;\nimport java.util.ArrayList;\nimport java.util.Arrays;\n\nimport com.corosus."
},
{
"path": "src/main/java/weather2/config/ConfigParticle.java",
"chars": 2356,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.ConfigComment;\nimport com.corosus.modconfig.IConfigCategory;\nimpo"
},
{
"path": "src/main/java/weather2/config/ConfigSand.java",
"chars": 2159,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.ConfigComment;\nimport com.corosus.modconfig.IConfigCategory;\nimpo"
},
{
"path": "src/main/java/weather2/config/ConfigSnow.java",
"chars": 1919,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.ConfigComment;\nimport com.corosus.modconfig.IConfigCategory;\nimpo"
},
{
"path": "src/main/java/weather2/config/ConfigSound.java",
"chars": 1084,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.ConfigParams;\nimport com.corosus.modconfig.IConfigCategory;\nimpor"
},
{
"path": "src/main/java/weather2/config/ConfigStorm.java",
"chars": 5420,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.ConfigComment;\nimport com.corosus.modconfig.IConfigCategory;\nimpo"
},
{
"path": "src/main/java/weather2/config/ConfigTornado.java",
"chars": 5048,
"preview": "package weather2.config;\n\nimport com.corosus.coroutil.config.ConfigCoroUtil;\nimport com.corosus.modconfig.ConfigComment;"
},
{
"path": "src/main/java/weather2/config/ConfigWind.java",
"chars": 1653,
"preview": "package weather2.config;\n\nimport com.corosus.modconfig.ConfigComment;\nimport com.corosus.modconfig.IConfigCategory;\nimpo"
},
{
"path": "src/main/java/weather2/config/WeatherUtilConfig.java",
"chars": 1434,
"preview": "package weather2.config;\n\nimport net.minecraft.resources.ResourceKey;\nimport net.minecraft.world.level.Level;\n\nimport ja"
},
{
"path": "src/main/java/weather2/data/BlockAndItemProvider.java",
"chars": 1482,
"preview": "package weather2.data;\n\nimport net.minecraft.client.renderer.texture.atlas.sources.SingleFile;\nimport net.minecraft.data"
},
{
"path": "src/main/java/weather2/data/BlockLootTables.java",
"chars": 1170,
"preview": "package weather2.data;\n\nimport net.minecraft.data.loot.BlockLootSubProvider;\nimport net.minecraft.world.flag.FeatureFlag"
},
{
"path": "src/main/java/weather2/data/WeatherRecipeProvider.java",
"chars": 4552,
"preview": "package weather2.data;\n\nimport net.minecraft.data.DataGenerator;\nimport net.minecraft.data.PackOutput;\nimport net.minecr"
},
{
"path": "src/main/java/weather2/datatypes/PrecipitationType.java",
"chars": 154,
"preview": "package weather2.datatypes;\n\npublic enum PrecipitationType {\n\tNORMAL,\n\tACID,\n\tHAIL,\n\tSNOW;\n\n\tpublic static final Precipi"
},
{
"path": "src/main/java/weather2/datatypes/StormState.java",
"chars": 786,
"preview": "package weather2.datatypes;\n\nimport net.minecraft.network.FriendlyByteBuf;\n\npublic final class StormState {\n\tprivate fin"
},
{
"path": "src/main/java/weather2/datatypes/WeatherEventType.java",
"chars": 388,
"preview": "package weather2.datatypes;\n\npublic enum WeatherEventType {\n\tHEAVY_RAIN(\"heavy_rain\"),\n\tACID_RAIN(\"acid_rain\"),\n\tHAIL(\"h"
},
{
"path": "src/main/java/weather2/energy/EnergyManager.java",
"chars": 1712,
"preview": "package weather2.energy;\n\nimport net.minecraft.nbt.CompoundTag;\nimport net.minecraftforge.common.capabilities.Capability"
},
{
"path": "src/main/java/weather2/item/WeatherItem.java",
"chars": 322,
"preview": "package weather2.item;\n\nimport net.minecraft.core.NonNullList;\nimport net.minecraft.world.item.CreativeModeTab;\nimport n"
},
{
"path": "src/main/java/weather2/ltcompat/ClientWeatherIntegration.java",
"chars": 1670,
"preview": "package weather2.ltcompat;\n\nimport weather2.datatypes.PrecipitationType;\n\npublic final class ClientWeatherIntegration {\n"
},
{
"path": "src/main/java/weather2/ltcompat/ServerWeatherIntegration.java",
"chars": 1174,
"preview": "package weather2.ltcompat;\n\nimport net.minecraft.server.level.ServerLevel;\nimport net.minecraft.util.Tuple;\nimport weath"
},
{
"path": "src/main/java/weather2/mixin/client/GameRendererOverride.java",
"chars": 572,
"preview": "package weather2.mixin.client;\n\nimport net.minecraft.client.Minecraft;\nimport net.minecraft.client.renderer.GameRenderer"
},
{
"path": "src/main/java/weather2/mixin/client/RenderParticlesOverride.java",
"chars": 3178,
"preview": "package weather2.mixin.client;\n\nimport com.mojang.blaze3d.vertex.PoseStack;\nimport net.minecraft.client.Camera;\nimport n"
},
{
"path": "src/main/java/weather2/player/PlayerData.java",
"chars": 2560,
"preview": "package weather2.player;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport j"
},
{
"path": "src/main/java/weather2/util/CachedNBTTagCompound.java",
"chars": 3847,
"preview": "package weather2.util;\n\nimport net.minecraft.nbt.CompoundTag;\n\n/**\n * Caches nbt data to remove redundant data sending o"
},
{
"path": "src/main/java/weather2/util/WeatherUtil.java",
"chars": 10228,
"preview": "package weather2.util;\n\nimport com.corosus.coroutil.util.CULog;\nimport net.minecraft.client.Minecraft;\nimport net.minecr"
},
{
"path": "src/main/java/weather2/util/WeatherUtilBlock.java",
"chars": 17816,
"preview": "package weather2.util;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport net.minecraft.core.BlockPos;\nimport net.m"
},
{
"path": "src/main/java/weather2/util/WeatherUtilDim.java",
"chars": 1193,
"preview": "package weather2.util;\n\nimport net.minecraft.world.level.block.state.BlockState;\nimport net.minecraft.core.BlockPos;\nimp"
},
{
"path": "src/main/java/weather2/util/WeatherUtilEntity.java",
"chars": 9250,
"preview": "package weather2.util;\n\nimport com.corosus.coroutil.util.CoroUtilEntOrParticle;\nimport extendedrenderer.particle.entity."
},
{
"path": "src/main/java/weather2/util/WeatherUtilParticle.java",
"chars": 9537,
"preview": "package weather2.util;\n\nimport java.lang.reflect.Field;\nimport java.util.ArrayDeque;\nimport java.util.Map;\nimport java.u"
},
{
"path": "src/main/java/weather2/util/WeatherUtilPhysics.java",
"chars": 3361,
"preview": "package weather2.util;\n\nimport net.minecraft.world.phys.Vec3;\n\nimport java.util.List;\n\n/**\n * Full of repurposed stack o"
},
{
"path": "src/main/java/weather2/util/WeatherUtilSound.java",
"chars": 5355,
"preview": "package weather2.util;\n\nimport net.minecraft.client.Minecraft;\nimport net.minecraft.sounds.SoundSource;\nimport net.minec"
},
{
"path": "src/main/java/weather2/util/WindReader.java",
"chars": 1773,
"preview": "package weather2.util;\n\nimport net.minecraft.core.BlockPos;\nimport net.minecraft.world.level.Level;\nimport net.minecraft"
},
{
"path": "src/main/java/weather2/weathersystem/WeatherManager.java",
"chars": 16323,
"preview": "package weather2.weathersystem;\n\nimport com.corosus.coroutil.util.CULog;\nimport net.minecraft.core.BlockPos;\nimport net."
},
{
"path": "src/main/java/weather2/weathersystem/WeatherManagerClient.java",
"chars": 6429,
"preview": "package weather2.weathersystem;\n\nimport com.corosus.coroutil.util.CoroUtilMisc;\nimport extendedrenderer.particle.entity."
},
{
"path": "src/main/java/weather2/weathersystem/WeatherManagerServer.java",
"chars": 29858,
"preview": "package weather2.weathersystem;\n\nimport com.corosus.coroutil.util.*;\nimport com.google.common.collect.Lists;\nimport net."
},
{
"path": "src/main/java/weather2/weathersystem/fog/FogAdjuster.java",
"chars": 12272,
"preview": "package weather2.weathersystem.fog;\n\nimport com.corosus.coroutil.util.CULog;\nimport net.minecraft.util.Mth;\nimport net.m"
},
{
"path": "src/main/java/weather2/weathersystem/fog/FogProfile.java",
"chars": 1558,
"preview": "package weather2.weathersystem.fog;\n\nimport org.joml.Vector3f;\n\npublic class FogProfile {\n\n private Vector3f rgb;\n "
},
{
"path": "src/main/java/weather2/weathersystem/storm/EnumWeatherObjectType.java",
"chars": 502,
"preview": "package weather2.weathersystem.storm;\n\nimport java.util.EnumSet;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic"
},
{
"path": "src/main/java/weather2/weathersystem/storm/LightningBoltWeather.java",
"chars": 8923,
"preview": "package weather2.weathersystem.storm;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.google.common.collect."
},
{
"path": "src/main/java/weather2/weathersystem/storm/LightningBoltWeatherNew.java",
"chars": 9440,
"preview": "package weather2.weathersystem.storm;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.google.common.collect."
},
{
"path": "src/main/java/weather2/weathersystem/storm/StormObject.java",
"chars": 105582,
"preview": "package weather2.weathersystem.storm;\n\nimport com.corosus.coroutil.config.ConfigCoroUtil;\nimport com.corosus.coroutil.ut"
},
{
"path": "src/main/java/weather2/weathersystem/storm/TornadoHelper.java",
"chars": 30092,
"preview": "package weather2.weathersystem.storm;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.mojang.authlib.GamePro"
},
{
"path": "src/main/java/weather2/weathersystem/storm/WeatherEntityConfig.java",
"chars": 538,
"preview": "package weather2.weathersystem.storm;\n\n\npublic class WeatherEntityConfig\n{\n public static int TYPE_SPOUT = 0;\n pub"
},
{
"path": "src/main/java/weather2/weathersystem/storm/WeatherObject.java",
"chars": 3897,
"preview": "package weather2.weathersystem.storm;\n\nimport net.minecraft.world.phys.Vec3;\nimport net.minecraftforge.api.distmarker.Di"
},
{
"path": "src/main/java/weather2/weathersystem/storm/WeatherObjectParticleStorm.java",
"chars": 7331,
"preview": "package weather2.weathersystem.storm;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.corosus.coroutil.util."
},
{
"path": "src/main/java/weather2/weathersystem/storm/WeatherObjectSandstormOld.java",
"chars": 5039,
"preview": "package weather2.weathersystem.storm;\n\nimport java.util.Random;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport "
},
{
"path": "src/main/java/weather2/weathersystem/storm/WeatherTypes.java",
"chars": 3426,
"preview": "package weather2.weathersystem.storm;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class WeatherTypes {\n\n"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/ActiveTornadoConfig.java",
"chars": 2792,
"preview": "package weather2.weathersystem.tornado;\n\nimport net.minecraft.nbt.CompoundTag;\n\n/**\n * Defines the shape and other chara"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/CatmullRomSpline.java",
"chars": 8116,
"preview": "\n/*******************************************************************************\n * Copyright 2011 See AUTHORS file.\n *"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/CubicBezierCurve.java",
"chars": 6334,
"preview": "package weather2.weathersystem.tornado;\n\n\nimport org.joml.Vector3f;\n\n/**\n * source: http://www.java2s.com/Code/Java/2D-G"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/Path.java",
"chars": 2033,
"preview": "/*******************************************************************************\n * Copyright 2011 See AUTHORS file.\n * "
},
{
"path": "src/main/java/weather2/weathersystem/tornado/TornadoFunnel.java",
"chars": 15326,
"preview": "package weather2.weathersystem.tornado;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport extendedrenderer.particl"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/TornadoManagerTodoRenameMe.java",
"chars": 22183,
"preview": "package weather2.weathersystem.tornado;\n\nimport extendedrenderer.particle.ParticleRegistry;\nimport extendedrenderer.part"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/Vector.java",
"chars": 7277,
"preview": "/*******************************************************************************\n * Copyright 2011 See AUTHORS file.\n *\n"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/simple/Layer.java",
"chars": 1802,
"preview": "package weather2.weathersystem.tornado.simple;\n\nimport extendedrenderer.particle.entity.PivotingParticle;\nimport net.min"
},
{
"path": "src/main/java/weather2/weathersystem/tornado/simple/TornadoFunnelSimple.java",
"chars": 22206,
"preview": "package weather2.weathersystem.tornado.simple;\n\nimport com.corosus.coroutil.util.CULog;\nimport extendedrenderer.particle"
},
{
"path": "src/main/java/weather2/weathersystem/wind/WindInfoCache.java",
"chars": 316,
"preview": "package weather2.weathersystem.wind;\n\npublic class WindInfoCache {\n\n public long cacheTimeWindSpeedEvent;\n public "
},
{
"path": "src/main/java/weather2/weathersystem/wind/WindManager.java",
"chars": 24056,
"preview": "package weather2.weathersystem.wind;\n\nimport com.corosus.coroutil.util.CoroUtilBlock;\nimport com.corosus.coroutil.util.C"
},
{
"path": "src/main/resources/META-INF/accesstransformer.cfg",
"chars": 5595,
"preview": "# Model hacks for item frames, need forge patch\npublic-f net.minecraft.client.renderer.model.ModelBakery field_209607_C "
},
{
"path": "src/main/resources/META-INF/mods.toml",
"chars": 4748,
"preview": "# This is an example mods.toml file. It contains the data relating to the loading mods.\n# There are several mandatory fi"
},
{
"path": "src/main/resources/assets/coroutil/blockstates/blank.json",
"chars": 77,
"preview": "{\n \"variants\": {\n \"normal\": {\n \"model\": \"coroutil:blank\"\n }\n }\n}"
},
{
"path": "src/main/resources/assets/coroutil/blockstates/repairing_block.json",
"chars": 87,
"preview": "{\n \"variants\": {\n \"normal\": {\n \"model\": \"coroutil:repairing_block\"\n }\n }\n}"
},
{
"path": "src/main/resources/assets/coroutil/config/loot_tables/testloot.json",
"chars": 1705,
"preview": "{\n \"pools\": [\n {\n \"rolls\": 1,\n \"entries\": [\n {\n \"type\""
},
{
"path": "src/main/resources/assets/coroutil/config/loot_tables/testlootboss.json",
"chars": 1359,
"preview": "{\n \"pools\": [\n {\n \"rolls\": 1,\n \"entries\": [\n {\n \"type\""
},
{
"path": "src/main/resources/assets/coroutil/config/templates/actions/mob_spawns.json",
"chars": 18009,
"preview": "{\n \"wiki\": \"//looking to customize your own invasions? see http://coros.us/wiki/index.php?title=Hostile_Worlds_-_Invasi"
},
{
"path": "src/main/resources/assets/coroutil/config/templates/actions/mob_spawns_example_commented.json",
"chars": 8644,
"preview": "{\n \"wiki\": \"//looking to customize your own invasions? see http://coros.us/wiki/index.php?title=Hostile_Worlds_-_Invasi"
},
{
"path": "src/main/resources/assets/coroutil/config/templates/actions/mob_spawns_testing_miners.json",
"chars": 1405,
"preview": "{\n \"format\": \"mob_spawns_testing_miners\",\n \"templates\": [\n {\n \"name\": \"invasion_stage_1_opt_1\",\n \"wave_me"
},
{
"path": "src/main/resources/assets/coroutil/config/templates/cmods/all_cmods.json",
"chars": 7397,
"preview": "{\n \"format\": \"cmods\",\n \"templates\": [\n {\n \"name\": \"all_cmods\",\n \"cmods\": [\n {\n \"cmod\": \"t"
},
{
"path": "src/main/resources/assets/coroutil/config/templates/cmods/invasions_cmods.json",
"chars": 7581,
"preview": "{\n \"format\": \"cmods\",\n \"templates\": [\n {\n \"name\": \"invader_miner\",\n \"cmods\": [\n {\n \"cmod\""
},
{
"path": "src/main/resources/assets/coroutil/config/templates/conditions/all_conditions.json",
"chars": 3045,
"preview": "{\n \"format\": \"conditions\",\n \"templates\": [\n {\n \"name\": \"all_conditions\",\n \"conditions\": [\n {\n "
},
{
"path": "src/main/resources/assets/coroutil/config/templates/conditions/invasions_stages.json",
"chars": 830,
"preview": "{\n \"format\": \"conditions\",\n \"templates\": [\n {\n \"name\": \"invasion_stage_1\",\n \"conditions\": [\n {\n "
},
{
"path": "src/main/resources/assets/coroutil/lang/en_us.json",
"chars": 44,
"preview": "{\n \"itemGroup.weather2\": \"Weather2 Items\"\n}"
},
{
"path": "src/main/resources/assets/coroutil/models/block/blank.json",
"chars": 4,
"preview": "{\n\n}"
},
{
"path": "src/main/resources/assets/coroutil/models/block/repairing_block.json",
"chars": 98,
"preview": "{\n \"parent\": \"block/cube_all\",\n \"textures\": {\n \"all\": \"coroutil:blocks/repairing_block\"\n }\n}"
},
{
"path": "src/main/resources/assets/coroutil/models/item/item_repairing_gel.json",
"chars": 102,
"preview": "{\n \"parent\": \"item/handheld\",\n \"textures\": {\n \"layer0\": \"coroutil:items/item_repairing_gel\"\n }\n}"
},
{
"path": "src/main/resources/assets/coroutil/models/item/repairing_block.json",
"chars": 300,
"preview": "{\n \"parent\": \"coroutil:block/repairing_block\",\n \"display\": {\n \"thirdperson\": {\n \"rotation\": [\n 10,\n "
},
{
"path": "src/main/resources/assets/coroutil/shaders/foliage.fs",
"chars": 1951,
"preview": "#version 130\n\nuniform sampler2D texture_sampler;\nuniform int fogmode;\n//uniform int stipple[64];\n\nvarying vec2 outTexCoo"
},
{
"path": "src/main/resources/assets/coroutil/shaders/foliage.vs",
"chars": 8374,
"preview": "#version 130\n#extension GL_EXT_gpu_shader4 : enable\n\n//in int gl_VertexID;\n//in int gl_InstanceID;\n//seldom changing or "
},
{
"path": "src/main/resources/assets/coroutil/shaders/particle.fs",
"chars": 921,
"preview": "#version 130\n\nuniform sampler2D texture_sampler;\nuniform int fogmode;\n\nvarying vec2 outTexCoord;\n//varying float outBrig"
},
{
"path": "src/main/resources/assets/coroutil/shaders/particle.vs",
"chars": 1269,
"preview": "#version 130\n#extension GL_EXT_gpu_shader4 : enable\n\nattribute vec3 position;\nattribute vec2 texCoord;\nattribute vec3 ve"
},
{
"path": "src/main/resources/assets/weather2/blockstates/anemometer.json",
"chars": 82,
"preview": "{\n \"variants\": {\n \"\": {\n \"model\": \"weather2:block/anemometer\"\n }\n }\n}"
},
{
"path": "src/main/resources/assets/weather2/blockstates/sand_layer.json",
"chars": 533,
"preview": "{\n \"variants\": {\n \"layers=1\": { \"model\": \"weather2:block/sand_height2\" },\n \"layers=2\": { \"model\": \"we"
},
{
"path": "src/main/resources/assets/weather2/blockstates/tornado_sensor.json",
"chars": 149,
"preview": "{\n \"variants\": {\n\t\"powered=true\": { \"model\": \"weather2:block/tornado_sensor\" },\n\t\"powered=false\": { \"model\": \"weather2:"
},
{
"path": "src/main/resources/assets/weather2/blockstates/tornado_sensor_new.json",
"chars": 400,
"preview": "{\n\t\"forge_marker\": 1,\n\t\"defaults\": {\n\t\t\"textures\": {\n\t\t\t\"all\": \"weather2:blocks/tornado_sensor\"\n\t\t},\n\t\t\"model\": \"weather"
}
]
// ... and 83 more files (download for full content)
About this extraction
This page contains the full source code of the Corosauce/weather2 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 283 files (1.0 MB), approximately 300.9k tokens, and a symbol index with 1291 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.