Compare commits

...
130 Commits
Author SHA1 Message Date
LexManos 3effde4f1f Enable promotion from actions 2025-12-03 18:39:02 -08:00
LexManos 4d0705370f Fix MDK run configs, and add fix for IntelliJ issues. 2025-12-03 11:48:54 -08:00
Mysticpasta1 25c661a7f0 Fix infinite recursion in Biome Dict error message (#10725) 2025-12-03 09:55:25 -08:00
LexManos dbd6c296f2 Migrate to Github Actions 2025-11-30 14:49:30 -08:00
Daniel Naylor d3f01843f7 Don't download log4j-slf4j18-impl (#8293) 2021-12-12 20:36:20 -08:00
SizableShrimp 8cc1e13a28 Update Installer to 2.1.+ and fix logging on server (#8286)
Update references of files.mcf.net/maven to maven.mcf.net

Signed-off-by: SizableShrimp <[email protected]>
2021-12-12 01:13:00 +10:30
Marc Hermans adb7f0d836 [#8281] Fix the output on Linux in the terminal. (#8282) 2021-12-11 05:26:29 +10:30
Marc Hermans d9986ac035 Fix an issue with the version number generation as well as the logging pattern output. (#8279) 2021-12-11 01:30:55 +10:30
Marc Hermans 2169e9d0d7 [CVE-2021-44228]: Update Log4J to fix the security issue inside it. (#8275) 2021-12-11 00:02:17 +10:30
Ned Loynd a8b9abcb17 Only apply the MC-68754 fix on Windows, closes #7546 (#7549)
MC-68754 only affects Minecraft on Windows, as per the comments on Mojang's bug tracker, and the LWJGL bug report (https://github.com/LWJGL/lwjgl/issues/142). This change simply checks if the OS running Minecraft is Windows before applying the fix. This was tested on Windows 10, MacOS Mojave, and Lubuntu (5.8.0-31), and all platforms allowed the window to be resized as expected after exiting fullscreen. As the MC-68754 fix was the cause of #7546, this issue is fixed by applying this patch.
2020-12-18 17:47:09 -08:00
DaemonUmbra 87a63bc5e0 Fixed the universal jar not having a main class or classpath, for server installations. 2020-04-12 10:53:11 -07:00
DaemonUmbra 0683971741 Updated License headers
(cherry picked from commit 7b852e5cab)
2020-04-12 10:01:07 -07:00
LexManos 49bdd556b5 Fix installer json data entry format. 2020-04-04 17:56:09 -07:00
LexManos 24c659dfa1 Skip userdev remap as we don't have any yet. 2020-04-04 14:38:42 -07:00
LexManos 54f9ca540e Fix J13 ambiguous reference and JenkinsFile skipping a step. 2020-04-04 14:24:44 -07:00
LexManos db6ab2a19e Migrate to FG3 2020-03-14 18:18:45 -07:00
ichttt 863ab2ca18 Fix CME when removing ticket managers (#5861) 2019-09-03 14:22:38 -07:00
Ben Staddon 45da4f6910 Add checks for tile entities in now-unloaded chunks (#5724) 2019-08-28 19:25:57 -07:00
Bartosz Skrzypczak c2630d2a79 Fix client sometimes generating biomes, causing incorrect biome generation on integrated server (#5720) 2019-08-28 19:25:11 -07:00
Ben Staddon 05f4f5ec77 Fix invalid placeholder entity attributes (MC-150405) (#5718) 2019-08-28 19:22:56 -07:00
Ben Staddon a5d0a86760 Allow conditional loading of advancements (#5255) 2019-08-28 19:02:29 -07:00
Derik 7b4a01703b Fix lightning not triggering EntityJoinWorldEvent (#5290) 2019-08-28 18:58:43 -07:00
Ben Staddon 3b99c80636 Improve performance of persistent chunk checks (#5706) 2019-08-28 18:21:38 -07:00
LexManos 20efd7150a Fix copy paste derp 2019-08-28 18:19:45 -07:00
LexManos c56377e4ee Remove test publish group. 2019-08-28 17:44:19 -07:00
LexManos 3e98e16f39 Fix windows installer directory. 2019-08-28 17:24:52 -07:00
LexManos d41cb552a1 Use official launch4j plugin to potentially fix build. 2019-08-28 17:08:36 -07:00
LexManos ae2cb06d2c Move to Jenkinsfile and new Jenkins server. 2019-08-28 16:06:54 -07:00
Gabriel Harris-Rouquette 9de9193062 Fix error prone state lookup during rail neighbor updates. (#6028) 2019-08-15 10:42:21 -07:00
Unnoen f8d32a8525 Don't cache OBJ and B3D models. Throw model loading errors immediately. (#5758) 2019-08-02 14:16:20 -07:00
Ben Staddon dac053415b Improve performance of smooth vertex lighting (#5763) 2019-08-02 14:14:41 -07:00
Joseph C. Sible 7a52116665 Fix SidedInvWrapper hashCode when side is null (#5787) 2019-08-02 14:12:52 -07:00
Ben Staddon 9ba67cedf1 Fix concurrent modification when loading chunk tickets (#5876) 2019-08-02 13:43:12 -07:00
Cloudhunter 5aac0beba9 Fix link applying to whole component in chat if component starts with link (#5910) 2019-08-02 13:41:18 -07:00
Ben Staddon 7849aebab0 Protect against concurrent modification in World#setTileEntity (#5752) 2019-08-02 13:39:05 -07:00
Ben Staddon ea26df0174 Fix more potentially unclosed resources (#5760) 2019-08-02 13:33:43 -07:00
Ben Staddon 3a62514e60 Fix various unclosed I/O resources (#5766) 2019-08-02 13:32:08 -07:00
Ben Staddon 9a636e3c76 Fix vanilla handling of options file (MC-117449, MC-151173) (#5725) 2019-05-13 10:01:08 -07:00
clienthax fa35f30e86 Update EnumHelper to be compatible with Eclipse's OpenJ9 JVM. (#5712) 2019-05-08 17:46:04 -07:00
tterrag 633fd9bd2e Revert "Invalidate tile entities that are queued for removal (#5512)"
This reverts commit 75788f63ee.

This solution is invalid as TEs are free to modify the world tileEntities
list, usually indirectly via chunkloading, from inside invalidate().

This happens in vanilla, in TileEntityChest#invalidate, where it calls
checkForAdjacentChests(), which has the potential to load neighboring
chunks and cause a CME.

A more sophisticated solution is needed.
2019-04-13 09:54:03 -04:00
Ben Staddon 3c426a2e66 Fix some vertex format changes not being handled correctly (#5368) 2019-04-11 16:05:19 -04:00
Ben Staddon 25375f63cc Transform vertex normals as well as positions when generating quads (#5242) 2019-04-11 12:59:16 -04:00
Robert WC Seifert 45cadab7c5 Fix for SidedInvWrapper isItemValid using wrong slot (#5642) 2019-04-11 11:29:14 -04:00
Ben Staddon 75788f63ee Invalidate tile entities that are queued for removal (#5512) 2019-04-11 11:03:36 -04:00
lclc98 3e7b8809b6 Added Wool to OreDictionary (#5414) 2019-04-11 11:01:40 -04:00
CreativeMD 6162f438f1 Fixed boat not taking care of block-liquid hooks (#5086) 2019-04-11 10:18:26 -04:00
Ben Staddon 1752e57ea0 Add Forge dimension-changing hooks to spectator handling code (#5212) 2019-04-11 10:05:19 -04:00
ichttt e91ef7f56b Minor performace improvement when building chunks and rendering blocks (#5286) 2019-04-11 10:03:01 -04:00
Ben Staddon 24f7be2f37 Catch json parsing errors from constants/factories files (#5258) 2019-04-11 08:52:23 -04:00
Ben Staddon 208ed997d4 Allow custom DataSerializers to be registered safely (#5245) 2019-04-11 08:33:12 -04:00
cpw 1f12642a05 Try and make 1.13 mods more obviously wrong in 1.12..
Signed-off-by: cpw <[email protected]>
2019-04-06 13:54:54 -04:00
tterrag e7beed4875 Fix #5651 Re-add canPlaceBlockOnSide check in World#mayPlace 2019-03-28 00:33:59 -04:00
Pokechu22 69a44e6414 Fail fast when null is used with setTag instead of crashing in writeEntry (#5257) 2019-03-22 12:53:07 -04:00
tterrag 3870951a37 Fix block placement not checking for player collision 2019-03-20 23:18:26 -04:00
Wyn Price af4fcd73a4 Added more Constants (#5323) 2019-03-15 15:38:52 -04:00
Thanh-Phuong 04a6b6c2d0 [1.12.2] Add a few events pertaining to villages (#5302) 2019-03-12 01:01:35 -04:00
Tyler Hancock 1b15c127a6 [1.12] Fix special spawn event not firing in many cases. (#5389) 2019-03-12 00:44:08 -04:00
Ben Staddon 8670abca57 Only prompt for missing registries on local worlds (#5348) 2019-03-12 00:34:29 -04:00
Christopher Krier f3d364397d Add EntityPlaceEvent (#5057) 2019-03-12 00:22:47 -04:00
Ben Staddon cc95c40b5b Generalise EnumRarity to an interface (#5182) 2019-03-12 00:02:57 -04:00
Ben Staddon e6fbf39591 Apply access-level changes to inner class attributes (#5468) 2019-02-14 22:46:35 -08:00
Ben Staddon 8cbac6af97 Fix small logic error in ItemTextureQuadConverter (#5463) 2019-02-13 17:03:37 -05:00
Ben Staddon 87cbf735a2 Better support for custom bows (#5209) 2019-02-13 15:58:43 -05:00
Ben Staddon bcbf184915 Improve tracking of used dimension IDs (#5249)
Closes #5378 Large dimension IDs bloat level.data
2019-02-13 15:28:58 -05:00
Phylogeny 965d872856 Fixed incorrect string representation of string list config property default values in their comments. 2019-02-13 15:26:53 -05:00
CovertJaguar 41a098e2f7 Remove FluidStack amount from hashcode calculation (#5272) 2019-02-06 15:35:18 -08:00
Ben Staddon 41d07e7aae Fix up torch placement logic to handle more vanilla special-casing (#5426) 2019-02-04 11:48:08 -08:00
LexManos d1adf00158 Written size does not include int bytes. 2019-02-01 00:46:29 -08:00
LexManos ed67b6fd31 Extend Region files to support >1MB per chunk.
If the 'sector count' is 255, ask the compressed data header for the proper length.
2019-02-01 00:34:45 -08:00
tterrag1098 d5ff207fab Add default impl to IConfigElement#getValidValuesDisplay 2019-01-19 16:40:49 -05:00
tterrag da7c299f7e Simplify custom item rendering by removing GL emissivity hacks 2019-01-10 06:09:06 -05:00
tterrag 204ebdc6dd Support diffuse lighting flag in item rendering 2019-01-04 13:48:36 -05:00
Ben Staddon be565d2ddc Add a hook to allow continuously using items through stack changes (#4834)
* Add a hook to allow continuously using items through stack changes

* Update licences
2019-01-03 23:22:24 -05:00
oOMitchOo 21f7c31f62 Added an additional constructor to every implementation of IFluidBlock. It is now possible to create a fluid block with a Fluid, Material and MapColor, so that the Material's MapColor isn't used for the blocks MapColor. (#5293) 2019-01-03 23:10:56 -05:00
Ben Staddon 4e11c95d0e Add redirects to PotionEffect to respect registry replacement (#5213) 2019-01-03 23:02:11 -05:00
AlexiyOrlov d1478ca529 Add an annotation for @Config elements which will automatically create a slider control (#5026) 2019-01-03 22:07:24 -05:00
Ben Staddon 359d4fe2d5 Fix small logic error in emissive item rendering code (#5320) 2019-01-03 21:11:34 -05:00
Phylogeny d3f27cf6fb Allow config GUI cycling button elements generated from enums to display toString return values, rather than actual values. (#5125) 2019-01-03 21:08:05 -05:00
Ben Staddon 3dd8c8ae6f Fix incorrect indexing in mipmap generation code (#5201) 2019-01-03 21:00:39 -05:00
Ben Staddon 54882f2564 Ensure slave maps are cleaned up when handling registry overrides (#5250) 2019-01-03 20:36:32 -05:00
Daniel Scalzi c5402d50fa Fix issue with --modListFile. (#5316) 2019-01-02 17:28:04 -08:00
LexManos a5f29570a3 Fix potential issues with the Minecraft FakePlayer lingering around after world unloads. 2018-12-07 22:03:32 -08:00
tterrag dd27209565 Fix potion remove event not always firing, add expiry event 2018-12-02 13:20:02 -05:00
tterrag f1d1e8853b Clean up CraftingHelper constants loading API 2018-12-02 03:05:53 -05:00
tterrag 5ef199f6d7 Fix crash from CraftingHelper due to FileSystem being closed early 2018-12-01 23:33:22 -05:00
mcenderdragon 2a5268c699 added PotionHooks, closes #3867, #4375 (#4614)
* solved merge confilct

* improved var names & removed tabs

* Added spaces around !=

* fixed typo
2018-12-01 20:13:13 -05:00
ichttt 32c24be6b4 Add a hook for farmland watering (#4891)
* Add a FarmlandWaterCheckEvent to allow mods to override when Farmland is watered or not

* revert 1.12.2 json

* Move the farmland patch to a ticket based instead of a event based system

* Minor changes

* Faster isValid checks, faster validation/invalidation if the state did not change, expand test mod to include a test for the validation system

* remove isValid boolean flag, we can express it with the tick counter

* Fix test mod resource warnings

* Remove tick timeout, add a javadoc note to invalidate on chunk unload, cleaned up test mod

* Allow mods to provide custom handling to determine if a pos is valid or not

* Make SimpleTicket more simple, make register public so custom tickets can be registered

* Fixes for review

* Add missing license headers

* Use a weak hash set

* Split up the map into smaller chunk based maps

* Add missing license headers

* Make MultiTicketManager more universal for custom implementations, cleanup imports
2018-12-01 20:08:04 -05:00
temp1011 5f56b7cd09 Add methods to allow loading json constants outside of _constants (#4975)
* add interface methods for loading json constants from an arbitary file

* use try-with-resources

* don't make modders create jsoncontext, clean up resource use

* very minor cleanup
2018-12-01 19:46:19 -05:00
ichttt 7f337cf230 Compute ASMDataTable submaps parallel, speeds up contructing mods (#5246)
* Compute submaps parallel, speeds up contructing mods by a lot

* Use stream API better
2018-12-01 19:38:46 -05:00
ichttt 7731e1cd75 Add logging for data manager key registration errors (#5129) 2018-12-01 16:28:02 -08:00
Ben Staddon f8879b1316 Improve support for custom block path types (#5203) 2018-12-01 16:27:20 -08:00
Luke Gilfoyle 3dfe47944d Fix missing comments in configs created with annotations (#5189) 2018-12-01 16:14:48 -08:00
Ben Staddon c11a712e2f Allow items to control the rate of repair from mending (#5102) 2018-12-01 16:08:15 -08:00
Ben Staddon 5771c8ffea Improve exception handling from server starting events (#5226) 2018-11-23 18:08:24 -08:00
Ben Staddon 9587f08ece Improve context provided by potion icon rendering hooks (#5111) 2018-11-23 16:36:29 -08:00
MrRiegel 73b6d10e5a Fix an ObjectHolderRef internal error message (#5214) 2018-11-23 16:03:44 -08:00
tterrag 90c244acb4 Implement rendering for item models with emissive quads (#5047) 2018-11-23 15:57:00 -08:00
Ben Staddon 3cf97f43fe Fix minor issue in getFilledPercentage for Fluid rendering (#5206) 2018-11-23 15:44:35 -08:00
Ben Staddon 0b47ccc015 Clean up logged mod states (#5227) 2018-11-23 15:42:11 -08:00
Paul Fulham 8d372f95f2 Fix inaccurate main thread name shown in client log (#5078) 2018-11-23 15:40:46 -08:00
Ben Staddon d16472d0ba Improve reflection helper methods (#4853) 2018-11-23 15:37:53 -08:00
Ben Staddon 896db6398f Fix Baked Item models with transformations (#5241) 2018-11-23 15:28:30 -08:00
Ben Staddon e406137b19 Prevent RecipeBook from crashing on empty modded ingredients (#5234) 2018-11-23 15:24:18 -08:00
Vincent Lee 16f4903285 Stop firing LivingSetAttackTargetEvent for setRevengeTarget (#5217) 2018-11-23 15:22:08 -08:00
Ben Staddon 84d322da34 Fix missing string parameters in some log messages (#5210) 2018-11-23 15:20:30 -08:00
Ben Staddon 3a64cb8985 Re-add some missing villager profession patches (#5200)
* Fix zombie villagers only spawning with vanilla professions
* Fix spawning modded villagers that do not have their own building
2018-11-23 15:19:44 -08:00
TheIllusiveC4 2fef75c1de Fix the bed position given to the SleepingTimeCheck event (#5107) 2018-11-23 15:15:33 -08:00
Ben Staddon c040a8865f Fix some null returns from defaulted registries (#5235) 2018-11-15 13:52:45 -08:00
Yanbing Zhao 4931fc1907 Only remove synthetic lambda methods referenced in body of SideOnly methods (#5127) 2018-11-14 21:39:30 -08:00
LexManos 607da1bd9b Use HTTPS for files website. 2018-11-13 16:16:33 -08:00
Ben Staddon ebc4eaddac Fix patches from #5160 setting rotation as well as position (#5233) 2018-11-12 12:50:00 -08:00
LexManos 10dbbf9c19 A different approach to my changes in https://github.com/MinecraftForge/MinecraftForge/commit/8ace535995522bec0557d4217e0d98b3dc76cf1e to fix #5207 2018-11-12 12:47:27 -08:00
Ben Staddon f9c2f715fd Allow IModel to express itself as a vanilla parent (#5195)
* Fix errors caused by fancy missing model being non-vanilla parent

* Switch instanceof checks to a default IModel method

* Small code tweaks
2018-10-18 19:22:32 -04:00
gaudus 4e1f7138ee fixed visual bug with guislider 2018-10-18 19:21:42 -04:00
Ben Staddon 5ae5d81609 Make Forge blockstate variants correctly inherit AO setting from vanilla models (#5190)
* Make Forge blockstate variants correctly inherit AO setting

* Move variant format checks into variant, check for added properties

* Small code cleanup
2018-10-18 19:21:26 -04:00
Ben Staddon 947a004138 Make Forge-provided default transforms accessible to custom models 2018-10-18 19:21:02 -04:00
InsomniaKitten e4ca526d5b Add CreativeTabs#getLabelColor 2018-10-18 19:20:40 -04:00
XCompWiz 1ba084f131 Allow providing a BufferedImage for banner render generation (#5041)
* Adds an Event to allow providing a BufferedImage for the banner render generation (cached)
This allows mods to provide generated banner textures, since banners don't use an atlas.
Includes reference/test implementation.

* Missed some copyright; might as well absolut text match, I guess

* Remove unneeded patch change

* Fix event variable access convention

* Formatting fix

* Improve event handling registration

* Import cleanup

* Replace event approach with Supplier approach

* Better name for test mod (now that it's no longer an event); adds ENABLE flag

* Moves MC code into net.minecraftforge.client.MinecraftForgeClient.getImageLayer to simplify patch

* Generalize naming
2018-10-11 19:25:25 -04:00
Tim 857573f10f Fix Mesa biome entry tags in the BiomeDictionary (#5177) 2018-10-07 12:37:23 -07:00
LexManos 76c138c400 Bump version number for RB. 2018-10-04 00:34:49 -07:00
Ben Staddon 55a7c6d64b Add a notification event for handling game rule changes (#5152) 2018-10-04 00:27:17 -07:00
Ben Staddon 0fb8844623 Patch PotionHelper to use registry delegates (#5142) 2018-10-04 00:25:58 -07:00
Ben Staddon 6337466735 Prevent some texture loading errors from crashing the game (#5121) 2018-10-04 00:24:51 -07:00
Ben Staddon 214275baba Change biome spawn list entries to use factory method where possible (#5075) 2018-10-04 00:24:01 -07:00
Ben Staddon 82262e462e Change universal bucket support to use fluid names instead of instances (#5031) 2018-10-04 00:20:44 -07:00
tterrag ee0d43bbde Fix NPE on clientside entities constructed with null world (#5170) 2018-09-28 12:32:19 -07:00
tterrag 93b704b459 Fix patches from #5160 running on the client and causing stutter 2018-09-27 21:42:06 -04:00
gegy1000 10036aa764 Class transformer optimizations (#5159)
* Filter packages for deobf transformation
* Only serialize transformed class with TerminalTransformer if bytecode changed
2018-09-27 14:27:21 -07:00
mezz fcd00bd4af Update github stale so issues can be Assigned 2018-09-26 21:22:54 -07:00
Gabriel Harris-Rouquette c20a5e8805 Fix MC-136995 - Chunk loading and unloading issue with entities placed in exact positions. (#5160)
Scatter gun patches to improve entity tracking and position tracking. 
Provided by Aikar through the Paper project, this commit of patches combines the following patches:

https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0306-Mark-chunk-dirty-anytime-entities-change-to-guarante.patch
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0315-Always-process-chunk-registration-after-moving.patch
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0335-Ensure-chunks-are-always-loaded-on-hard-position-set.patch
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0378-Sync-Player-Position-to-Vehicles.patch
2018-09-26 11:08:30 -07:00
963 changed files with 8899 additions and 3179 deletions

No files matched your search

+3 -5
View File
@@ -6,15 +6,15 @@ staleLabel: Stale
unmarkComment: false
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 1
# Issues with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- Assigned
pulls:
# Number of days of inactivity before a Pull Request becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale Pull Request is closed
daysUntilClose: 14
# Pull Requests with these labels will never be considered stale. Set to `[]` to disable
exemptLabels:
- Assigned
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This pull request has been automatically marked as stale because it has not had recent
@@ -30,8 +30,6 @@ issues:
daysUntilStale: 180
# Number of days of inactivity before a stale Issue is closed
daysUntilClose: 14
# Issues with these labels will never be considered stale. Set to `[]` to disable
exemptLabels: []
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had activity
+30
View File
@@ -0,0 +1,30 @@
name: Publish
on:
push:
branches: [ '1.12.x' ]
permissions:
contents: read
jobs:
build:
uses: MinecraftForge/SharedActions/.github/workflows/gradle.yml@main
with:
java: 8
gradle_tasks: 'ciWriteBuildNumber setup build publish'
legacy_prefix: 14
legacy_build_number: 2848
artifact_name: 'forge'
secrets:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
PROMOTE_ARTIFACT_WEBHOOK: ${{ secrets.PROMOTE_ARTIFACT_WEBHOOK }}
PROMOTE_ARTIFACT_USERNAME: ${{ secrets.PROMOTE_ARTIFACT_USERNAME }}
PROMOTE_ARTIFACT_PASSWORD: ${{ secrets.PROMOTE_ARTIFACT_PASSWORD }}
MAVEN_USER: ${{ secrets.MAVEN_USER }}
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
# Unused for now until we upgrade gradle
# SIGN_KEY_ALIAS: ${{ secrets.SIGN_KEY_ALIAS }}
# SIGN_KEY_PASSWORD: ${{ secrets.SIGN_KEY_PASSWORD }}
# SIGN_KEYSTORE_PASSWORD: ${{ secrets.SIGN_KEYSTORE_PASSWORD }}
# SIGN_KEYSTORE_DATA: ${{ secrets.SIGN_KEYSTORE_DATA }}
+11
View File
@@ -30,3 +30,14 @@ changelog.txt
/patches_old_bak/
*.py
*.7z
.project
/mdk/.gradle/
/mdk/.settings/
/mdk/bin/
/mdk/build/
/mdk/crash-reports/
/mdk/logs/
/mdk/resourcepacks/
/mdk/run/
*.launch
*.classpath
-30
View File
@@ -1,30 +0,0 @@
sudo: required
dist: trusty
language: java
jdk: oraclejdk8
env:
- BUILD_NUMBER=9999
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
- rm -f $HOME/.gradle/caches/minecraft/deobfedDeps/providedDummy.jar
- rm -f $HOME/.gradle/caches/minecraft/deobfedDeps/compileDummy.jar
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
- $TRAVIS_BUILD_DIR/build/localCache/Forge/
before_install: chmod +x gradlew
install:
- ./gradlew --refresh-dependencies
- ./gradlew ciWriteBuildNumber
script:
- travis_wait ./gradlew build -x createExe -S
- ./gradlew -p projects/Forge test -S -i
notifications:
email: false
+2 -2
View File
@@ -1,5 +1,5 @@
Minecraft Forge
Copyright (c) 2016-2018.
Copyright (c) 2016-2020.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -13,4 +13,4 @@ Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+992 -457
View File
File diff suppressed because it is too large. Load diff
Binary file not shown.
+1 -2
View File
@@ -1,6 +1,5 @@
#Mon Sep 14 12:28:28 PDT 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip
Vendored
+59 -51
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/usr/bin/env sh
##############################################################################
##
@@ -6,47 +6,6 @@
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
@@ -61,9 +20,49 @@ while [ -h "$PRG" ] ; do
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -90,7 +89,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -114,6 +113,7 @@ fi
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
@@ -154,11 +154,19 @@ if $cygwin ; then
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
APP_ARGS=$(save "$@")
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
Vendored
+4 -10
View File
@@ -8,14 +8,14 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem 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=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -46,10 +46,9 @@ echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
@@ -60,11 +59,6 @@ set _SKIP=2
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
+430
View File
@@ -0,0 +1,430 @@
Build 2838:
bs2609: Fix vanilla handling of options file (MC-117449, MC-151173) (#5725)
Build 2837:
clienthax: Update EnumHelper to be compatible with Eclipse's OpenJ9 JVM. (#5712)
Build 2836:
tterrag:
Revert "Invalidate tile entities that are queued for removal (#5512)"
This reverts commit 75788f63eea6c33ccef7e5cbcab27ad9ad2c2a04.
This solution is invalid as TEs are free to modify the world
tileEntities list, usually indirectly via chunkloading, from inside
invalidate().
This happens in vanilla, in TileEntityChest#invalidate, where it calls
checkForAdjacentChests(), which has the potential to load neighboring
chunks and cause a CME.
A more sophisticated solution is needed.
Build 2835:
bs2609: Fix some vertex format changes not being handled correctly (#5368)
Build 2834:
bs2609:
Transform vertex normals as well as positions when generating quads
(#5242)
Build 2833:
rseifert.phone: Fix for SidedInvWrapper isItemValid using wrong slot (#5642)
Build 2832:
bs2609: Invalidate tile entities that are queued for removal (#5512)
Build 2831:
lclc98: Added Wool to OreDictionary (#5414)
Build 2830:
CreativeMD: Fixed boat not taking care of block-liquid hooks (#5086)
Build 2829:
bs2609: Add Forge dimension-changing hooks to spectator handling code (#5212)
Build 2828:
ichttt:
Minor performace improvement when building chunks and rendering blocks
(#5286)
Build 2827:
bs2609: Catch json parsing errors from constants/factories files (#5258)
Build 2826:
bs2609: Allow custom DataSerializers to be registered safely (#5245)
Build 2825:
cpw:
Try and make 1.13 mods more obviously wrong in 1.12..
Signed-off-by: cpw <[email protected]>
Build 2824:
tterrag: Fix #5651 Re-add canPlaceBlockOnSide check in World#mayPlace
Build 2823:
Pokechu022:
Fail fast when null is used with setTag instead of crashing in
writeEntry (#5257)
Build 2822:
tterrag: Fix block placement not checking for player collision
Build 2821:
wynprice999: Added more Constants (#5323)
Build 2820:
python0429: [1.12.2] Add a few events pertaining to villages (#5302)
Build 2819:
Tyler Hancock: [1.12] Fix special spawn event not firing in many cases. (#5389)
Build 2818:
bs2609: Only prompt for missing registries on local worlds (#5348)
Build 2817:
ckrier.3000: Add EntityPlaceEvent (#5057)
Build 2816:
bs2609: Generalise EnumRarity to an interface (#5182)
Build 2815:
bs2609: Apply access-level changes to inner class attributes (#5468)
Build 2814:
bs2609: Fix small logic error in ItemTextureQuadConverter (#5463)
Build 2813:
bs2609: Better support for custom bows (#5209)
Build 2812:
CovertJaguar: Remove FluidStack amount from hashcode calculation (#5272)
molecularphylo:
Fixed incorrect string representation of string list config property
default values in their comments.
bs2609:
Improve tracking of used dimension IDs (#5249)
Closes #5378 Large dimension IDs bloat level.data
Build 2811:
bs2609:
Fix up torch placement logic to handle more vanilla special-casing
(#5426)
Build 2810:
LexManos: Written size does not include int bytes.
Build 2809:
LexManos:
Extend Region files to support >1MB per chunk. If the 'sector count' is
255, ask the compressed data header for the proper length.
Build 2808:
tterrag1098: Add default impl to IConfigElement#getValidValuesDisplay
Build 2807:
tterrag: Simplify custom item rendering by removing GL emissivity hacks
Build 2806:
tterrag: Support diffuse lighting flag in item rendering
Build 2805:
bs2609:
Add a hook to allow continuously using items through stack changes
(#4834)
* Add a hook to allow continuously using items through stack changes
* Update licences
Build 2804:
oOMitchOo:
Added an additional constructor to every implementation of IFluidBlock.
It is now possible to create a fluid block with a Fluid, Material and
MapColor, so that the Material's MapColor isn't used for the blocks
MapColor. (#5293)
Build 2803:
bs2609: Add redirects to PotionEffect to respect registry replacement (#5213)
Build 2802:
alexiy.ov:
Add an annotation for @Config elements which will automatically create a
slider control (#5026)
Build 2801:
bs2609: Fix small logic error in emissive item rendering code (#5320)
Build 2800:
molecularphylo:
Allow config GUI cycling button elements generated from enums to display
toString return values, rather than actual values. (#5125)
Build 2799:
bs2609: Fix incorrect indexing in mipmap generation code (#5201)
Build 2798:
bs2609:
Ensure slave maps are cleaned up when handling registry overrides
(#5250)
Build 2797:
d_scalzi: Fix issue with --modListFile. (#5316)
Build 2796:
LexManos:
Fix potential issues with the Minecraft FakePlayer lingering around
after world unloads.
Build 2795:
tterrag: Fix potion remove event not always firing, add expiry event
Build 2794:
tterrag: Clean up CraftingHelper constants loading API
Build 2793:
tterrag: Fix crash from CraftingHelper due to FileSystem being closed early
Build 2792:
tterrag:
added PotionHooks, closes #3867, #4375 (#4614)
* solved merge confilct
* improved var names & removed tabs
* Added spaces around !=
* fixed typo
Build 2791:
tterrag:
Add a hook for farmland watering (#4891)
* Add a FarmlandWaterCheckEvent to allow mods to override when Farmland
is watered or not
* revert 1.12.2 json
* Move the farmland patch to a ticket based instead of a event based
system
* Minor changes
* Faster isValid checks, faster validation/invalidation if the state did
not change, expand test mod to include a test for the validation system
* remove isValid boolean flag, we can express it with the tick counter
* Fix test mod resource warnings
* Remove tick timeout, add a javadoc note to invalidate on chunk unload,
cleaned up test mod
* Allow mods to provide custom handling to determine if a pos is valid
or not
* Make SimpleTicket more simple, make register public so custom tickets
can be registered
* Fixes for review
* Add missing license headers
* Use a weak hash set
* Split up the map into smaller chunk based maps
* Add missing license headers
* Make MultiTicketManager more universal for custom implementations,
cleanup imports
Build 2790:
tterrag:
Add methods to allow loading json constants outside of _constants
(#4975)
* add interface methods for loading json constants from an arbitary file
* use try-with-resources
* don't make modders create jsoncontext, clean up resource use
* very minor cleanup
Build 2789:
tterrag:
Compute ASMDataTable submaps parallel, speeds up contructing mods
(#5246)
* Compute submaps parallel, speeds up contructing mods by a lot
* Use stream API better
Build 2788:
mezz: Add logging for data manager key registration errors (#5129)
Build 2787:
mezz: Improve support for custom block path types (#5203)
Build 2786:
mezz: Fix missing comments in configs created with annotations (#5189)
Build 2785:
mezz: Allow items to control the rate of repair from mending (#5102)
Build 2784:
mezz: Improve exception handling from server starting events (#5226)
Build 2783:
mezz: Improve context provided by potion icon rendering hooks (#5111)
Build 2782:
mezz: Fix an ObjectHolderRef internal error message (#5214)
Build 2781:
mezz: Implement rendering for item models with emissive quads (#5047)
Build 2780:
mezz: Clean up logged mod states (#5227)
mezz: Fix minor issue in getFilledPercentage for Fluid rendering (#5206)
Build 2779:
mezz: Improve reflection helper methods (#4853)
mezz: Fix inaccurate main thread name shown in client log (#5078)
Build 2778:
mezz: Fix Baked Item models with transformations (#5241)
Build 2777:
mezz:
Re-add some missing villager profession patches (#5200)
* Fix zombie villagers only spawning with vanilla professions
* Fix spawning modded villagers that do not have their own building
mezz: Fix missing string parameters in some log messages (#5210)
mezz: Stop firing LivingSetAttackTargetEvent for setRevengeTarget (#5217)
mezz: Prevent RecipeBook from crashing on empty modded ingredients (#5234)
Build 2776:
mezz: Fix the bed position given to the SleepingTimeCheck event (#5107)
Build 2775:
LexManos: Fix some null returns from defaulted registries (#5235)
Build 2774:
LexManos:
Only remove synthetic lambda methods referenced in body of SideOnly
methods (#5127)
Build 2773:
LexManos:
A different approach to my changes in
https://github.com/MinecraftForge/MinecraftForge/commit/8ace535995522bec0557d4217e0d98b3dc76cf1e
to fix #5207
LexManos: Fix patches from #5160 setting rotation as well as position (#5233)
LexManos: Use HTTPS for files website.
Build 2772:
tterrag: Make Forge-provided default transforms accessible to custom models
tterrag:
Make Forge blockstate variants correctly inherit AO setting from vanilla
models (#5190)
* Make Forge blockstate variants correctly inherit AO setting
* Move variant format checks into variant, check for added properties
* Small code cleanup
tterrag: fixed visual bug with guislider
tterrag:
Allow IModel to express itself as a vanilla parent (#5195)
* Fix errors caused by fancy missing model being non-vanilla parent
* Switch instanceof checks to a default IModel method
* Small code tweaks
Build 2771:
tterrag: Add CreativeTabs#getLabelColor
Build 2770:
tterrag:
Allow providing a BufferedImage for banner render generation (#5041)
* Adds an Event to allow providing a BufferedImage for the banner render
generation (cached)
textures, since banners don't use an atlas.
implementation.
* Missed some copyright; might as well absolut text match, I guess
* Remove unneeded patch change
* Fix event variable access convention
* Formatting fix
* Improve event handling registration
* Import cleanup
* Replace event approach with Supplier approach
* Better name for test mod (now that it's no longer an event); adds
ENABLE flag
* Moves MC code into
net.minecraftforge.client.MinecraftForgeClient.getImageLayer to simplify
patch
* Generalize naming
Build 2769:
mezz: Fix Mesa biome entry tags in the BiomeDictionary (#5177)
Build 2768:
LexManos: Bump version number for RB.
Build 2767:
LexManos:
Change biome spawn list entries to use factory method where possible
(#5075)
LexManos: Prevent some texture loading errors from crashing the game (#5121)
LexManos: Patch PotionHelper to use registry delegates (#5142)
LexManos: Add a notification event for handling game rule changes (#5152)
Build 2766:
LexManos:
Change universal bucket support to use fluid names instead of instances
(#5031)
Build 2765:
LexManos: Fix NPE on clientside entities constructed with null world (#5170)
Build 2764:
tterrag: Fix patches from #5160 running on the client and causing stutter
Build 2763:
LexManos:
Class transformer optimizations (#5159)
* Filter packages for deobf transformation
* Only serialize transformed class with TerminalTransformer if bytecode
changed
Build 2762:
github: Update github stale so issues can be Assigned
Build 2761:
LexManos:
Fix MC-136995 - Chunk loading and unloading issue with entities placed
in exact positions. (#5160)
Scatter gun patches to improve entity tracking and position tracking.
Provided by Aikar through the Paper project, this commit of patches
combines the following patches:
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0306-Mark-chunk-dirty-anytime-entities-change-to-guarante.patch
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0315-Always-process-chunk-registration-after-moving.patch
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0335-Ensure-chunks-are-always-loaded-on-hard-position-set.patch
https://github.com/PaperMC/Paper/blob/fd1bd5223a461b6d98280bb8f2d67280a30dd24a/Spigot-Server-Patches/0378-Sync-Player-Position-to-Vehicles.patch
Build 2760:
LexManos: Fix --mods and --modListFile arguments not making it past LaunchWrapper.
Build 2759:
LexManos: Remove BlamingTransformer (#5115)
+12 -21
View File
@@ -19,35 +19,26 @@ http://mcforge.readthedocs.io/en/latest/gettingstarted/
Step 1: Open your command-line and browse to the folder where you extracted the zip file.
Step 2: Once you have a command window up in the folder that the downloaded material was placed, type:
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.
(Current Issue)
4. Open Project > Run/Debug Settings > Edit runClient and runServer > Environment
5. Edit MOD_CLASSES to show [modid]%%[Path]; 2 times rather then the generated 4.
Windows: "gradlew setupDecompWorkspace"
Linux/Mac OS: "./gradlew setupDecompWorkspace"
Step 3: After all that finished, you're left with a choice.
For eclipse, run "gradlew eclipse" (./gradlew eclipse if you are on Mac/Linux)
If you prefer to use IntelliJ, steps are a little different.
If you prefer to use IntelliJ:
1. Open IDEA, and import project.
2. Select your build.gradle file and have it import.
3. Once it's finished you must close IntelliJ and run the following command:
"gradlew genIntellijRuns" (./gradlew genIntellijRuns if you are on Mac/Linux)
Step 4: The final step is to open Eclipse and switch your workspace to /eclipse/ (if you use IDEA, it should automatically start on your project)
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 processs again.
Should it still not work,
Refer to #ForgeGradle on EsperNet for more information about the gradle environment.
Tip:
If you do not care about seeing Minecraft's source code you can replace "setupDecompWorkspace" with one of the following:
"setupDevWorkspace": Will patch, deobfuscate, and gather required assets to run minecraft, but will not generate human readable source code.
"setupCIWorkspace": Same as Dev but will not download any assets. This is useful in build servers as it is the fastest because it does the least work.
Tip:
When using Decomp workspace, the Minecraft source code is NOT added to your workspace in a editable way. Minecraft is treated like a normal Library. Sources are there for documentation and research purposes and usually can be accessed under the 'referenced libraries' section of your IDE.
or the Forge Project Discord discord.gg/UvedJ9m
Forge source installation
=========================
+101 -52
View File
@@ -1,77 +1,126 @@
buildscript {
repositories {
jcenter()
maven { url = "http://files.minecraftforge.net/maven" }
maven { url = 'https://maven.minecraftforge.net/' }
mavenCentral()
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
classpath 'net.minecraftforge.gradle:ForgeGradle:3.+'
}
}
apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
apply plugin: 'net.minecraftforge.gradle'
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
version = '1.0'
group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'modid'
version = "1.0"
group = "com.yourname.modid" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "modid"
sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
compileJava {
sourceCompatibility = targetCompatibility = '1.8'
}
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
minecraft {
version = "@VERSION@"
runDir = "run"
// the mappings can be changed at any time, and must be in the following format.
// snapshot_YYYYMMDD snapshot are built nightly.
// stable_# stables are built at the discretion of the MCP team.
// The mappings can be changed at any time, and must be in the following format.
// snapshot_YYYYMMDD Snapshot are built nightly.
// stable_# Stables are built at the discretion of the MCP team.
// 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 = "@MAPPINGS@"
// Simply re-run your setup task after changing the mappings to update your workspace.
//mappings channel: '@MAPPING_CHANNEL@', version: '@MAPPING_VERSION@'
mappings channel: 'snapshot', version: '20171003-1.12'
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
client {
workingDirectory project.file('run')
// Recommended logging data for a userdev environment
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
// Recommended logging level for the console
property 'forge.logging.console.level', 'debug'
}
server {
// Recommended logging data for a userdev environment
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
// Recommended logging level for the console
property 'forge.logging.console.level', 'debug'
}
}
}
dependencies {
// you may put jars on which you depend on in ./libs
// or you may define them like so..
//compile "some.group:artifact:version:classifier"
//compile "some.group:artifact:version"
// real examples
//compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
//compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
// Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed
// that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied.
// The userdev artifact is a special name and will get all sorts of transformations applied to it.
minecraft '@FORGE_GROUP@:@FORGE_NAME@:@FORGE_VERSION@'
// the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
//provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
// You may put jars on which you depend on in ./libs or you may define them like so..
// compile "some.group:artifact:version:classifier"
// compile "some.group:artifact:version"
// the deobf configurations: 'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
// except that these dependencies get remapped to your current MCP mappings
//deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
//deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
// Real examples
// compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
// compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
// for more info...
// The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
// provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
// These dependencies get remapped to your current MCP mappings
// deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev'
// For more info...
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
}
processResources {
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
// replace version and mcversion
expand 'version':project.version, 'mcversion':project.minecraft.version
}
// copy everything else except the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
// Example for how to get properties into the manifest for reading by the runtime..
jar {
manifest {
attributes([
"Specification-Title": "examplemod",
"Specification-Vendor": "examplemodsareus",
"Specification-Version": "1", // We are version 1 of ourselves
"Implementation-Title": project.name,
"Implementation-Version": "${version}",
"Implementation-Vendor" :"examplemodsareus",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
// Example configuration to allow publishing using the maven-publish task
// This is the preferred method to reobfuscate your jar file
jar.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
//publish.dependsOn('reobfJar')
publishing {
publications {
mavenJava(MavenPublication) {
artifact jar
}
}
repositories {
maven {
url "file:///${project.projectDir}/mcmodsrepo"
}
}
}
// FML does not support loading exploded directories as mods.
// Eclipse works fine because it merges classes and resources when debugging
// IntelliJ used to work because FG2 forced the files to be jared during debugging.
// Since FG3+ doesn't do that, we need to merge the sourcesets from gradle's side.
sourceSets.each {
def dir = layout.buildDirectory.file("sourcesSets/$it.name").get().asFile
it.output.resourcesDir = dir
it.java.outputDir = dir
}
@@ -1,4 +0,0 @@
#Sun Jun 05 18:58:07 CEST 2011
version=1
eclipse.preferences.version=1
refresh.enabled=true
@@ -1,7 +0,0 @@
#Sun Jun 05 19:03:53 CEST 2011
eclipse.preferences.version=1
org.eclipse.debug.ui.UseContextualLaunch=false
Console.highWaterMark=88000
org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<launchPerspectives/>\r\n
org.eclipse.debug.ui.user_view_bindings=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<viewBindings>\r\n<view id\="org.eclipse.ui.console.ConsoleView">\r\n<perspective id\="org.eclipse.jdt.ui.JavaPerspective" userAction\="opened"/>\r\n</view>\r\n</viewBindings>\r\n
StringVariablePreferencePage=130,107,107,86,
@@ -1,3 +0,0 @@
#Sun Jun 05 18:58:07 CEST 2011
eclipse.preferences.version=1
org.eclipse.epp.usagedata.gathering.enabled=false
@@ -1,14 +0,0 @@
#Sun Sep 18 16:44:39 NZST 2011
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=ignore
org.eclipse.jdt.core.compiler.problem.deprecation=ignore
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.problem.unusedLocal=ignore
org.eclipse.jdt.core.compiler.problem.unusedImport=ignore
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=ignore
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.source=1.6
@@ -1,4 +0,0 @@
#Sun Jun 05 18:58:05 CEST 2011
spacesForTabs=true
eclipse.preferences.version=1
overviewRuler_migration=migrated_3.1
@@ -1,9 +0,0 @@
#Sun Jun 05 18:58:07 CEST 2011
IMPORT_FILES_AND_FOLDERS_MODE=prompt
IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE=prompt
SAVE_ALL_BEFORE_BUILD=true
eclipse.preferences.version=1
tipsAndTricks=true
platformState=1287081747687
quickStart=false
PROBLEMS_FILTERS_MIGRATE=true
@@ -1,3 +0,0 @@
#Sun Jun 05 18:50:08 CEST 2011
eclipse.preferences.version=1
showIntro=false
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/MDKExample"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="GradleStart"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MDKExample"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xincgc -Xmx1024M -Xms1024M"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}/run"/>
</launchConfiguration>
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/MDKExample"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="GradleStartServer"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MDKExample"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xincgc -Xmx1024M -Xms1024M"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}/run"/>
</launchConfiguration>
@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchHistory>
<launchGroup id="org.eclipse.ui.externaltools.launchGroup">
<mruHistory/>
<favorites/>
</launchGroup>
<launchGroup id="org.eclipse.debug.ui.launchGroup.profile">
<mruHistory/>
<favorites/>
</launchGroup>
<launchGroup id="org.eclipse.debug.ui.launchGroup.debug">
<mruHistory>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Client&quot;/&gt;&#13;&#10;"/>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Server&quot;/&gt;&#13;&#10;"/>
</mruHistory>
<favorites/>
</launchGroup>
<launchGroup id="org.eclipse.debug.ui.launchGroup.run">
<mruHistory>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Client&quot;/&gt;&#13;&#10;"/>
<launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Server&quot;/&gt;&#13;&#10;"/>
</mruHistory>
<favorites/>
</launchGroup>
</launchHistory>
+3
View File
@@ -20,3 +20,6 @@ build
# other
eclipse
run
# Files from Forge MDK
forge*changelog.txt
+1
View File
@@ -1,3 +1,4 @@
# 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
@@ -221,7 +221,7 @@
public SoundType func_185467_w()
{
return this.field_149762_H;
@@ -934,6 +952,1361 @@
@@ -934,6 +952,1388 @@
{
}
@@ -837,13 +837,18 @@
+ */
+ public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos)
+ {
+ if (state.func_185896_q() || state.func_193401_d(world, pos, EnumFacing.UP) == BlockFaceShape.SOLID)
+ if (this == Blocks.field_185775_db || this == Blocks.field_150428_aP)
+ {
+ return this != Blocks.field_185775_db && this != Blocks.field_150428_aP;
+ return false;
+ }
+ else if (state.func_185896_q() || this instanceof BlockFence || this == Blocks.field_150359_w || this == Blocks.field_150463_bK || this == Blocks.field_150399_cn)
+ {
+ return true;
+ }
+ else
+ {
+ return this instanceof BlockFence || this == Blocks.field_150359_w || this == Blocks.field_150463_bK || this == Blocks.field_150399_cn;
+ BlockFaceShape shape = state.func_193401_d(world, pos, EnumFacing.UP);
+ return (shape == BlockFaceShape.SOLID || shape == BlockFaceShape.CENTER || shape == BlockFaceShape.CENTER_BIG) && !func_193384_b(this);
+ }
+ }
+
@@ -1403,6 +1408,20 @@
+ {
+ return null;
+ }
+
+ /**
+ * Called when entities are swimming in the given liquid and returns the relative height (used by {@link net.minecraft.entity.item.EntityBoat})
+ *
+ * @param world world that is being tested.
+ * @param pos block thats being tested.
+ * @param state state at world/pos
+ * @param material liquid thats being tested.
+ * @return relative height of the given liquid (material), a value between 0 and 1
+ */
+ public float getBlockLiquidHeight(World world, BlockPos pos, IBlockState state, Material material)
+ {
+ return 0;
+ }
+
+ /**
+ * Queries if this block should render in a given layer.
@@ -1540,15 +1559,23 @@
+ return false;
+ }
+
+ /** @deprecated use {@link #getAiPathNodeType(IBlockState, IBlockAccess, BlockPos, net.minecraft.entity.EntityLiving)} */
+ @Nullable
+ @Deprecated // TODO: remove
+ public net.minecraft.pathfinding.PathNodeType getAiPathNodeType(IBlockState state, IBlockAccess world, BlockPos pos)
+ {
+ return isBurning(world, pos) ? net.minecraft.pathfinding.PathNodeType.DAMAGE_FIRE : null;
+ }
+
+ /**
+ * Get the {@code PathNodeType} for this block. Return {@code null} for vanilla behavior.
+ *
+ * @return the PathNodeType
+ */
+ @Nullable
+ public net.minecraft.pathfinding.PathNodeType getAiPathNodeType(IBlockState state, IBlockAccess world, BlockPos pos)
+ public net.minecraft.pathfinding.PathNodeType getAiPathNodeType(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable net.minecraft.entity.EntityLiving entity)
+ {
+ return isBurning(world, pos) ? net.minecraft.pathfinding.PathNodeType.DAMAGE_FIRE : null;
+ return getAiPathNodeType(state, world, pos);
+ }
+
+ /**
@@ -1583,7 +1610,7 @@
public static void func_149671_p()
{
func_176215_a(0, field_176230_a, (new BlockAir()).func_149663_c("air"));
@@ -1105,7 +2478,7 @@
@@ -1105,7 +2505,7 @@
Block block11 = (new BlockQuartz()).func_149672_a(SoundType.field_185851_d).func_149711_c(0.8F).func_149663_c("quartzBlock");
func_176219_a(155, "quartz_block", block11);
func_176219_a(156, "quartz_stairs", (new BlockStairs(block11.func_176223_P().func_177226_a(BlockQuartz.field_176335_a, BlockQuartz.EnumType.DEFAULT))).func_149663_c("stairsQuartz"));
@@ -1592,7 +1619,7 @@
func_176219_a(158, "dropper", (new BlockDropper()).func_149711_c(3.5F).func_149672_a(SoundType.field_185851_d).func_149663_c("dropper"));
func_176219_a(159, "stained_hardened_clay", (new BlockStainedHardenedClay()).func_149711_c(1.25F).func_149752_b(7.0F).func_149672_a(SoundType.field_185851_d).func_149663_c("clayHardenedStained"));
func_176219_a(160, "stained_glass_pane", (new BlockStainedGlassPane()).func_149711_c(0.3F).func_149672_a(SoundType.field_185853_f).func_149663_c("thinStainedGlass"));
@@ -1230,31 +2603,6 @@
@@ -1230,31 +2630,6 @@
block15.field_149783_u = flag;
}
}
@@ -18,3 +18,12 @@
}
private boolean func_176530_e(World p_176530_1_, BlockPos p_176530_2_)
@@ -108,7 +108,7 @@
}
}
- return false;
+ return net.minecraftforge.common.FarmlandWaterManager.hasBlockWaterTicket(p_176530_1_, p_176530_2_);
}
public void func_189540_a(IBlockState p_189540_1_, World p_189540_2_, BlockPos p_189540_3_, Block p_189540_4_, BlockPos p_189540_5_)
@@ -17,7 +17,17 @@
this.func_180688_d(p_176365_1_, p_176365_2_);
return true;
}
@@ -452,4 +452,29 @@
@@ -448,8 +448,39 @@
return (float)p_190972_2_.func_177956_o() + func_190973_f(p_190972_0_, p_190972_1_, p_190972_2_);
}
+ @Override
+ public float getBlockLiquidHeight(World world, BlockPos pos, IBlockState state, Material material)
+ {
+ return BlockLiquid.func_190973_f(state, world, pos);
+ }
+
public BlockFaceShape func_193383_a(IBlockAccess p_193383_1_, IBlockState p_193383_2_, BlockPos p_193383_3_, EnumFacing p_193383_4_)
{
return BlockFaceShape.UNDEFINED;
}
@@ -27,12 +27,13 @@
}
public void func_176213_c(World p_176213_1_, BlockPos p_176213_2_, IBlockState p_176213_3_)
@@ -93,27 +93,27 @@
@@ -93,32 +93,33 @@
{
if (!p_189540_2_.field_72995_K)
{
- BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = (BlockRailBase.EnumRailDirection)p_189540_1_.func_177229_b(this.func_176560_l());
+ BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = getRailDirection(p_189540_2_, p_189540_3_, p_189540_2_.func_180495_p(p_189540_3_), null);
+ final IBlockState currentState = p_189540_2_.func_180495_p(p_189540_3_);
+ BlockRailBase.EnumRailDirection blockrailbase$enumraildirection = getRailDirection(p_189540_2_, p_189540_3_, currentState.func_177230_c() == this ? currentState : p_189540_1_, null);
boolean flag = false;
- if (!p_189540_2_.func_180495_p(p_189540_3_.func_177977_b()).func_185896_q())
@@ -61,7 +62,13 @@
{
flag = true;
}
@@ -154,7 +154,7 @@
- if (flag && !p_189540_2_.func_175623_d(p_189540_3_))
+ if (flag && !currentState.func_177230_c().isAir(currentState, p_189540_2_, p_189540_3_))
{
this.func_176226_b(p_189540_2_, p_189540_3_, p_189540_1_, 0);
p_189540_2_.func_175698_g(p_189540_3_);
@@ -154,7 +155,7 @@
{
super.func_180663_b(p_180663_1_, p_180663_2_, p_180663_3_);
@@ -70,7 +77,7 @@
{
p_180663_1_.func_175685_c(p_180663_2_.func_177984_a(), this, false);
}
@@ -166,8 +166,101 @@
@@ -166,8 +167,101 @@
}
}
@@ -172,7 +179,7 @@
public static enum EnumRailDirection implements IStringSerializable
{
NORTH_SOUTH(0, "north_south"),
@@ -238,6 +331,7 @@
@@ -238,6 +332,7 @@
private IBlockState field_180366_e;
private final boolean field_150656_f;
private final List<BlockPos> field_150657_g = Lists.<BlockPos>newArrayList();
@@ -180,7 +187,7 @@
public Rail(World p_i45739_2_, BlockPos p_i45739_3_, IBlockState p_i45739_4_)
{
@@ -245,8 +339,9 @@
@@ -245,8 +340,9 @@
this.field_180367_c = p_i45739_3_;
this.field_180366_e = p_i45739_4_;
this.field_180365_d = (BlockRailBase)p_i45739_4_.func_177230_c();
@@ -192,7 +199,7 @@
this.func_180360_a(blockrailbase$enumraildirection);
}
@@ -438,7 +533,7 @@
@@ -438,7 +534,7 @@
}
}
@@ -201,7 +208,7 @@
{
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos.func_177984_a()))
{
@@ -451,7 +546,7 @@
@@ -451,7 +547,7 @@
}
}
@@ -210,7 +217,7 @@
{
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos3.func_177984_a()))
{
@@ -594,7 +689,7 @@
@@ -594,7 +690,7 @@
}
}
@@ -219,7 +226,7 @@
{
if (BlockRailBase.func_176562_d(this.field_150660_b, blockpos.func_177984_a()))
{
@@ -607,7 +702,7 @@
@@ -607,7 +703,7 @@
}
}
@@ -1,6 +1,14 @@
--- ../src-base/minecraft/net/minecraft/client/Minecraft.java
+++ ../src-work/minecraft/net/minecraft/client/Minecraft.java
@@ -344,7 +344,6 @@
@@ -332,6 +332,7 @@
public Minecraft(GameConfiguration p_i45547_1_)
{
field_71432_P = this;
+ net.minecraftforge.client.ForgeHooksClient.invalidateLog4jThreadCache();
this.field_71412_D = p_i45547_1_.field_178744_c.field_178760_a;
this.field_110446_Y = p_i45547_1_.field_178744_c.field_178759_c;
this.field_130070_K = p_i45547_1_.field_178744_c.field_178758_b;
@@ -344,7 +345,6 @@
this.field_152355_az = (new YggdrasilAuthenticationService(this.field_110453_aa, UUID.randomUUID().toString())).createMinecraftSessionService();
this.field_71449_j = p_i45547_1_.field_178745_a.field_178752_a;
field_147123_G.info("Setting user: {}", (Object)this.field_71449_j.func_111285_a());
@@ -8,7 +16,7 @@
this.field_71459_aj = p_i45547_1_.field_178741_d.field_178756_a;
this.field_71443_c = p_i45547_1_.field_178743_b.field_178764_a > 0 ? p_i45547_1_.field_178743_b.field_178764_a : 1;
this.field_71440_d = p_i45547_1_.field_178743_b.field_178762_b > 0 ? p_i45547_1_.field_178743_b.field_178762_b : 1;
@@ -464,10 +463,10 @@
@@ -464,10 +464,10 @@
this.field_110451_am = new SimpleReloadableResourceManager(this.field_110452_an);
this.field_135017_as = new LanguageManager(this.field_110452_an, this.field_71474_y.field_74363_ab);
this.field_110451_am.func_110542_a(this.field_135017_as);
@@ -21,7 +29,7 @@
this.field_152350_aA = new SkinManager(this.field_71446_o, new File(this.field_110446_Y, "skins"), this.field_152355_az);
this.field_71469_aa = new AnvilSaveConverter(new File(this.field_71412_D, "saves"), this.field_184131_U);
this.field_147127_av = new SoundHandler(this.field_110451_am, this.field_71474_y);
@@ -487,6 +486,8 @@
@@ -487,6 +487,8 @@
this.field_110451_am.func_110542_a(new GrassColorReloadListener());
this.field_110451_am.func_110542_a(new FoliageColorReloadListener());
this.field_71417_B = new MouseHelper();
@@ -30,7 +38,7 @@
this.func_71361_d("Pre startup");
GlStateManager.func_179098_w();
GlStateManager.func_179103_j(7425);
@@ -500,19 +501,24 @@
@@ -500,19 +502,24 @@
GlStateManager.func_179096_D();
GlStateManager.func_179128_n(5888);
this.func_71361_d("Startup");
@@ -55,7 +63,7 @@
this.field_71460_t = new EntityRenderer(this, this.field_110451_am);
this.field_110451_am.func_110542_a(this.field_71460_t);
this.field_175618_aM = new BlockRendererDispatcher(this.field_175617_aL.func_174954_c(), this.field_184127_aH);
@@ -523,23 +529,27 @@
@@ -523,23 +530,27 @@
this.field_110451_am.func_110542_a(this.field_193995_ae);
GlStateManager.func_179083_b(0, 0, this.field_71443_c, this.field_71440_d);
this.field_71452_i = new ParticleManager(this.field_71441_e, this.field_71446_o);
@@ -86,7 +94,7 @@
if (this.field_71474_y.field_74353_u && !this.field_71431_Q)
{
this.func_71352_k();
@@ -748,21 +758,23 @@
@@ -748,21 +759,23 @@
File file2 = new File(file1, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt");
Bootstrap.func_179870_a(p_71377_1_.func_71502_e());
@@ -113,7 +121,7 @@
}
public boolean func_152349_b()
@@ -770,6 +782,7 @@
@@ -770,6 +783,7 @@
return this.field_135017_as.func_135042_a() || this.field_71474_y.field_151455_aw;
}
@@ -121,7 +129,7 @@
public void func_110436_a()
{
List<IResourcePack> list = Lists.newArrayList(this.field_110449_ao);
@@ -955,11 +968,6 @@
@@ -955,11 +969,6 @@
public void func_147108_a(@Nullable GuiScreen p_147108_1_)
{
@@ -133,7 +141,7 @@
if (p_147108_1_ == null && this.field_71441_e == null)
{
p_147108_1_ = new GuiMainMenu();
@@ -969,6 +977,17 @@
@@ -969,6 +978,17 @@
p_147108_1_ = new GuiGameOver((ITextComponent)null);
}
@@ -151,7 +159,7 @@
if (p_147108_1_ instanceof GuiMainMenu || p_147108_1_ instanceof GuiMultiplayer)
{
this.field_71474_y.field_74330_P = false;
@@ -1082,7 +1101,7 @@
@@ -1082,7 +1102,7 @@
long i1 = System.nanoTime() - l;
this.func_71361_d("Pre render");
this.field_71424_I.func_76318_c("sound");
@@ -160,7 +168,7 @@
this.field_71424_I.func_76319_b();
this.field_71424_I.func_76320_a("render");
GlStateManager.func_179094_E();
@@ -1094,11 +1113,13 @@
@@ -1094,11 +1114,13 @@
if (!this.field_71454_w)
{
@@ -174,7 +182,7 @@
}
this.field_71424_I.func_76319_b();
@@ -1455,9 +1476,9 @@
@@ -1455,9 +1477,9 @@
{
BlockPos blockpos = this.field_71476_x.func_178782_a();
@@ -186,7 +194,7 @@
this.field_71439_g.func_184609_a(EnumHand.MAIN_HAND);
}
}
@@ -1491,7 +1512,7 @@
@@ -1491,7 +1513,7 @@
case BLOCK:
BlockPos blockpos = this.field_71476_x.func_178782_a();
@@ -195,7 +203,7 @@
{
this.field_71442_b.func_180511_b(blockpos, this.field_71476_x.field_178784_b);
break;
@@ -1505,6 +1526,7 @@
@@ -1505,6 +1527,7 @@
}
this.field_71439_g.func_184821_cY();
@@ -203,7 +211,7 @@
}
this.field_71439_g.func_184609_a(EnumHand.MAIN_HAND);
@@ -1570,6 +1592,7 @@
@@ -1570,6 +1593,7 @@
}
}
@@ -211,11 +219,11 @@
if (!itemstack.func_190926_b() && this.field_71442_b.func_187101_a(this.field_71439_g, this.field_71441_e, enumhand) == EnumActionResult.SUCCESS)
{
this.field_71460_t.field_78516_c.func_187460_a(enumhand);
@@ -1630,6 +1653,11 @@
@@ -1630,6 +1654,11 @@
}
Display.setFullscreen(this.field_71431_Q);
+ if (!this.field_71431_Q) //Forge: Fix MC-68754, Screen is not resizeable after exiting fullscreen due to LWJGL bug https://github.com/LWJGL/lwjgl/issues/142 which is fixed, but not in the version MC ships
+ if (!this.field_71431_Q && (Util.func_110647_a() == Util.EnumOS.WINDOWS)) //Forge: Fix MC-68754, Screen is not resizeable after exiting fullscreen due to LWJGL bug https://github.com/LWJGL/lwjgl/issues/142 which is fixed, but not in the version MC ships
+ {
+ Display.setResizable(false);
+ Display.setResizable(true);
@@ -223,7 +231,7 @@
Display.setVSyncEnabled(this.field_71474_y.field_74352_v);
this.func_175601_h();
}
@@ -1676,6 +1704,8 @@
@@ -1676,6 +1705,8 @@
--this.field_71467_ac;
}
@@ -232,7 +240,7 @@
this.field_71424_I.func_76320_a("gui");
if (!this.field_71445_n)
@@ -1877,6 +1907,7 @@
@@ -1877,6 +1908,7 @@
}
this.field_71424_I.func_76319_b();
@@ -240,7 +248,7 @@
this.field_71423_H = func_71386_F();
}
@@ -1982,6 +2013,7 @@
@@ -1982,6 +2014,7 @@
}
}
}
@@ -248,7 +256,7 @@
}
this.func_184117_aA();
@@ -2239,6 +2271,8 @@
@@ -2239,6 +2272,8 @@
{
while (Mouse.next())
{
@@ -257,7 +265,7 @@
int i = Mouse.getEventButton();
KeyBinding.func_74510_a(i - 100, Mouse.getEventButtonState());
@@ -2294,6 +2328,7 @@
@@ -2294,6 +2329,7 @@
this.field_71462_r.func_146274_d();
}
}
@@ -265,7 +273,7 @@
}
}
@@ -2304,6 +2339,7 @@
@@ -2304,6 +2340,7 @@
public void func_71371_a(String p_71371_1_, String p_71371_2_, @Nullable WorldSettings p_71371_3_)
{
@@ -273,14 +281,11 @@
this.func_71403_a((WorldClient)null);
System.gc();
ISaveHandler isavehandler = this.field_71469_aa.func_75804_a(p_71371_1_, false);
@@ -2344,8 +2380,14 @@
@@ -2346,6 +2383,12 @@
this.field_71461_s.func_73720_a(I18n.func_135052_a("menu.loadingLevel"));
- while (!this.field_71437_Z.func_71200_ad())
+ while (!this.field_71437_Z.func_71200_ad() && !this.field_71437_Z.func_71241_aa())
while (!this.field_71437_Z.func_71200_ad())
{
+ if (!net.minecraftforge.fml.common.StartupQuery.check())
+ if (!net.minecraftforge.fml.common.StartupQuery.check() || this.field_71437_Z.func_71241_aa())
+ {
+ func_71403_a(null);
+ func_147108_a(null);
@@ -289,7 +294,7 @@
String s = this.field_71437_Z.func_71195_b_();
if (s != null)
@@ -2371,8 +2413,14 @@
@@ -2371,8 +2414,14 @@
SocketAddress socketaddress = this.field_71437_Z.func_147137_ag().func_151270_a();
NetworkManager networkmanager = NetworkManager.func_150722_a(socketaddress);
networkmanager.func_150719_a(new NetHandlerLoginClient(networkmanager, this, (GuiScreen)null));
@@ -306,7 +311,7 @@
this.field_71453_ak = networkmanager;
}
@@ -2383,6 +2431,8 @@
@@ -2383,6 +2432,8 @@
public void func_71353_a(@Nullable WorldClient p_71353_1_, String p_71353_2_)
{
@@ -315,7 +320,7 @@
if (p_71353_1_ == null)
{
NetHandlerPlayClient nethandlerplayclient = this.func_147114_u();
@@ -2395,6 +2445,18 @@
@@ -2395,6 +2446,18 @@
if (this.field_71437_Z != null && this.field_71437_Z.func_175578_N())
{
this.field_71437_Z.func_71263_m();
@@ -334,7 +339,7 @@
}
this.field_71437_Z = null;
@@ -2418,6 +2480,7 @@
@@ -2418,6 +2481,7 @@
this.field_71456_v.func_181029_i();
this.func_71351_a((ServerData)null);
this.field_71455_al = false;
@@ -342,7 +347,7 @@
}
this.field_147127_av.func_147690_c();
@@ -2434,6 +2497,7 @@
@@ -2434,6 +2498,7 @@
}
TileEntityRendererDispatcher.field_147556_a.func_147543_a(p_71353_1_);
@@ -350,7 +355,7 @@
if (p_71353_1_ != null)
{
@@ -2488,6 +2552,7 @@
@@ -2488,6 +2553,7 @@
EntityPlayerSP entityplayersp = this.field_71439_g;
this.field_71439_g = this.field_71442_b.func_192830_a(this.field_71441_e, this.field_71439_g == null ? new StatisticsManager() : this.field_71439_g.func_146107_m(), this.field_71439_g == null ? new RecipeBook() : this.field_71439_g.func_192035_E());
this.field_71439_g.func_184212_Q().func_187218_a(entityplayersp.func_184212_Q().func_187231_c());
@@ -358,7 +363,7 @@
this.field_71439_g.field_71093_bK = p_71354_1_;
this.field_175622_Z = this.field_71439_g;
this.field_71439_g.func_70065_x();
@@ -2535,159 +2600,8 @@
@@ -2535,159 +2601,8 @@
{
if (this.field_71476_x != null && this.field_71476_x.field_72313_a != RayTraceResult.Type.MISS)
{
@@ -520,7 +525,7 @@
}
}
@@ -2834,6 +2748,7 @@
@@ -2834,6 +2749,7 @@
return field_71432_P;
}
@@ -528,7 +533,7 @@
public ListenableFuture<Object> func_175603_A()
{
return this.func_152344_a(new Runnable()
@@ -3009,18 +2924,8 @@
@@ -3009,18 +2925,8 @@
public static int func_71369_N()
{
@@ -549,7 +554,7 @@
}
public boolean func_70002_Q()
@@ -3152,6 +3057,9 @@
@@ -3152,6 +3058,9 @@
}
else if (this.field_71439_g != null)
{
@@ -559,7 +564,7 @@
if (this.field_71439_g.field_70170_p.field_73011_w instanceof WorldProviderHell)
{
return MusicTicker.MusicType.NETHER;
@@ -3181,11 +3089,11 @@
@@ -3181,11 +3090,11 @@
{
if (Keyboard.getEventKeyState())
{
@@ -573,7 +578,7 @@
{
this.field_71456_v.func_146158_b().func_146227_a(ScreenShotHelper.func_148260_a(this.field_71412_D, this.field_71443_c, this.field_71440_d, this.field_147124_at));
}
@@ -3199,6 +3107,7 @@
@@ -3199,6 +3108,7 @@
}
}
}
@@ -581,7 +586,7 @@
}
}
}
@@ -3328,6 +3237,12 @@
@@ -3328,6 +3238,12 @@
return this.field_184127_aH;
}
@@ -594,7 +599,7 @@
public boolean func_189648_am()
{
return this.field_71439_g != null && this.field_71439_g.func_175140_cp() || this.field_71474_y.field_178879_v;
@@ -3342,4 +3257,9 @@
@@ -3342,4 +3258,9 @@
{
return this.field_193035_aW;
}
@@ -1,5 +1,14 @@
--- ../src-base/minecraft/net/minecraft/client/entity/AbstractClientPlayer.java
+++ ../src-work/minecraft/net/minecraft/client/entity/AbstractClientPlayer.java
@@ -135,7 +135,7 @@
f = 1.0F;
}
- if (this.func_184587_cr() && this.func_184607_cu().func_77973_b() == Items.field_151031_f)
+ if (this.func_184587_cr() && this.func_184607_cu().func_77973_b() instanceof net.minecraft.item.ItemBow)
{
int i = this.func_184612_cw();
float f1 = (float)i / 20.0F;
@@ -152,6 +152,6 @@
f *= 1.0F - f1 * 0.15F;
}
@@ -29,7 +29,7 @@
+ // FORGE - Move status icon check down from above so renderHUDEffect will still be called without a status icon
+ if (potion.func_76400_d())
this.func_73729_b(k + 3, l + 3, i1 % 8 * 18, 198 + i1 / 8 * 18, 18, 18);
+ potion.renderHUDEffect(k, l, potioneffect, field_73839_d, f);
+ potion.renderHUDEffect(potioneffect, this, k, l, this.field_73735_i, f);
}
}
}
@@ -20,6 +20,15 @@
}
public List<String> func_191927_a(ItemStack p_191927_1_)
@@ -142,7 +146,7 @@
{
if (i == 0)
{
- list.set(i, p_191927_1_.func_77953_t().field_77937_e + (String)list.get(i));
+ list.set(i, p_191927_1_.func_77973_b().getForgeRarity(p_191927_1_).getColor() + (String)list.get(i));
}
else
{
@@ -170,7 +174,13 @@
public void func_146283_a(List<String> p_146283_1_, int p_146283_2_, int p_146283_3_)
@@ -67,7 +67,7 @@
if (this.field_147062_A.func_146179_b().isEmpty())
{
for (Item item : Item.field_150901_e)
@@ -366,7 +403,7 @@
@@ -366,10 +403,10 @@
{
CreativeTabs creativetabs = CreativeTabs.field_78032_a[field_147058_w];
@@ -75,7 +75,11 @@
+ if (creativetabs != null && creativetabs.func_78019_g())
{
GlStateManager.func_179084_k();
this.field_146289_q.func_78276_b(I18n.func_135052_a(creativetabs.func_78024_c()), 8, 6, 4210752);
- this.field_146289_q.func_78276_b(I18n.func_135052_a(creativetabs.func_78024_c()), 8, 6, 4210752);
+ this.field_146289_q.func_78276_b(I18n.func_135052_a(creativetabs.func_78024_c()), 8, 6, creativetabs.getLabelColor());
}
}
@@ -401,7 +438,7 @@
for (CreativeTabs creativetabs : CreativeTabs.field_78032_a)
@@ -160,6 +164,15 @@
GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.func_179140_f();
this.func_191948_b(p_73863_1_, p_73863_2_);
@@ -654,7 +719,7 @@
{
if (i == 0)
{
- list.set(i, p_146285_1_.func_77953_t().field_77937_e + (String)list.get(i));
+ list.set(i, p_146285_1_.func_77973_b().getForgeRarity(p_146285_1_).getColor() + (String)list.get(i));
}
else
{
@@ -662,7 +727,10 @@
}
}
@@ -18,3 +18,12 @@
int l = 1;
Iterator<Ingredient> iterator = p_193951_1_.func_192400_c().iterator();
@@ -500,7 +500,7 @@
Ingredient ingredient = iterator.next();
- if (ingredient != Ingredient.field_193370_a)
+ if (ingredient.func_193365_a().length > 0)
{
Slot slot = p_193951_2_.get(l);
this.field_191915_z.func_194187_a(ingredient, slot.field_75223_e, slot.field_75221_f);
@@ -0,0 +1,20 @@
--- ../src-base/minecraft/net/minecraft/client/model/ModelSkeleton.java
+++ ../src-work/minecraft/net/minecraft/client/model/ModelSkeleton.java
@@ -48,7 +48,7 @@
this.field_187075_l = ModelBiped.ArmPose.EMPTY;
ItemStack itemstack = p_78086_1_.func_184586_b(EnumHand.MAIN_HAND);
- if (itemstack.func_77973_b() == Items.field_151031_f && ((AbstractSkeleton)p_78086_1_).func_184725_db())
+ if (itemstack.func_77973_b() instanceof net.minecraft.item.ItemBow && ((AbstractSkeleton)p_78086_1_).func_184725_db())
{
if (p_78086_1_.func_184591_cq() == EnumHandSide.RIGHT)
{
@@ -69,7 +69,7 @@
ItemStack itemstack = ((EntityLivingBase)p_78087_7_).func_184614_ca();
AbstractSkeleton abstractskeleton = (AbstractSkeleton)p_78087_7_;
- if (abstractskeleton.func_184725_db() && (itemstack.func_190926_b() || itemstack.func_77973_b() != Items.field_151031_f))
+ if (abstractskeleton.func_184725_db() && (itemstack.func_190926_b() || !(itemstack.func_77973_b() instanceof net.minecraft.item.ItemBow)))
{
float f = MathHelper.func_76126_a(this.field_78095_p * (float)Math.PI);
float f1 = MathHelper.func_76126_a((1.0F - (1.0F - this.field_78095_p) * (1.0F - this.field_78095_p)) * (float)Math.PI);
@@ -99,3 +99,12 @@
packetbuffer.release();
}
}
@@ -2087,7 +2099,7 @@
if (iattributeinstance == null)
{
- iattributeinstance = abstractattributemap.func_111150_b(new RangedAttribute((IAttribute)null, spacketentityproperties$snapshot.func_151409_a(), 0.0D, 2.2250738585072014E-308D, Double.MAX_VALUE));
+ iattributeinstance = abstractattributemap.func_111150_b(new RangedAttribute((IAttribute)null, spacketentityproperties$snapshot.func_151409_a(), 0.0D, -Double.MAX_VALUE, Double.MAX_VALUE)); // Forge: fix invalid value range (MC-150405)
}
iattributeinstance.func_111128_a(spacketentityproperties$snapshot.func_151410_b());
@@ -33,7 +33,7 @@
this.func_73729_b(i + 6, j + 7, 0 + i1 % 8 * 18, 198 + i1 / 8 * 18, 18, 18);
}
+ potion.renderInventoryEffect(i, j, potioneffect, field_146297_k);
+ potion.renderInventoryEffect(potioneffect, this, i, j, this.field_73735_i);
+ if (!potion.shouldRenderInvText(potioneffect)) { j += l; continue; }
String s1 = I18n.func_135052_a(potion.func_76393_a());
@@ -14,7 +14,7 @@
ItemStack itemstack = abstractclientplayer.func_184607_cu();
- if (itemstack.func_77973_b() == Items.field_151031_f)
+ if (!itemstack.func_190926_b() && itemstack.func_77973_b() == Items.field_151031_f) //Forge: Data watcher can desync and cause this to NPE...
+ if (itemstack.func_77973_b() instanceof net.minecraft.item.ItemBow)
{
EnumHand enumhand1 = abstractclientplayer.func_184600_cs();
flag = enumhand1 == EnumHand.MAIN_HAND;
@@ -9,7 +9,19 @@
this.func_175041_b();
this.field_184395_f = p_i46552_3_;
}
@@ -137,7 +137,7 @@
@@ -113,6 +113,11 @@
private void func_191967_a(IBakedModel p_191967_1_, int p_191967_2_, ItemStack p_191967_3_)
{
+ if (net.minecraftforge.common.ForgeModContainer.allowEmissiveItems)
+ {
+ net.minecraftforge.client.ForgeHooksClient.renderLitItem(this, p_191967_1_, p_191967_2_, p_191967_3_);
+ return;
+ }
Tessellator tessellator = Tessellator.func_178181_a();
BufferBuilder bufferbuilder = tessellator.func_178180_c();
bufferbuilder.func_181668_a(7, DefaultVertexFormats.field_176599_b);
@@ -137,7 +142,7 @@
{
GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.func_179091_B();
@@ -18,7 +30,7 @@
}
else
{
@@ -218,7 +218,7 @@
@@ -218,7 +223,7 @@
k = k | -16777216;
}
@@ -27,7 +39,7 @@
}
}
@@ -240,17 +240,7 @@
@@ -240,17 +245,7 @@
public IBakedModel func_184393_a(ItemStack p_184393_1_, @Nullable World p_184393_2_, @Nullable EntityLivingBase p_184393_3_)
{
IBakedModel ibakedmodel = this.field_175059_m.func_178089_a(p_184393_1_);
@@ -46,7 +58,7 @@
}
public void func_184392_a(ItemStack p_184392_1_, EntityLivingBase p_184392_2_, ItemCameraTransforms.TransformType p_184392_3_, boolean p_184392_4_)
@@ -274,14 +264,9 @@
@@ -274,14 +269,9 @@
GlStateManager.func_179147_l();
GlStateManager.func_187428_a(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.func_179094_E();
@@ -63,7 +75,7 @@
this.func_180454_a(p_184394_1_, p_184394_2_);
GlStateManager.func_187407_a(GlStateManager.CullFace.BACK);
GlStateManager.func_179121_F();
@@ -314,7 +299,7 @@
@@ -314,7 +304,7 @@
GlStateManager.func_187401_a(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F);
this.func_180452_a(p_191962_2_, p_191962_3_, p_191962_4_.func_177556_c());
@@ -72,7 +84,7 @@
this.func_180454_a(p_191962_1_, p_191962_4_);
GlStateManager.func_179118_c();
GlStateManager.func_179101_C();
@@ -367,6 +352,7 @@
@@ -367,6 +357,7 @@
return String.valueOf((Object)p_184391_2_.func_77973_b());
}
});
@@ -80,7 +92,7 @@
crashreportcategory.func_189529_a("Item Aux", new ICrashReportDetail<String>()
{
public String call() throws Exception
@@ -413,9 +399,12 @@
@@ -413,9 +404,12 @@
p_180453_1_.func_175063_a(s, (float)(p_180453_3_ + 19 - 2 - p_180453_1_.func_78256_a(s)), (float)(p_180453_4_ + 6 + 3), 16777215);
GlStateManager.func_179145_e();
GlStateManager.func_179126_j();
@@ -94,7 +106,7 @@
{
GlStateManager.func_179140_f();
GlStateManager.func_179097_i();
@@ -424,11 +413,10 @@
@@ -424,11 +418,10 @@
GlStateManager.func_179084_k();
Tessellator tessellator = Tessellator.func_178181_a();
BufferBuilder bufferbuilder = tessellator.func_178180_c();
@@ -110,7 +122,7 @@
this.func_181565_a(bufferbuilder, p_180453_3_ + 2, p_180453_4_ + 13, 13, 2, 0, 0, 0, 255);
this.func_181565_a(bufferbuilder, p_180453_3_ + 2, p_180453_4_ + 13, i, 1, j >> 16 & 255, j >> 8 & 255, j & 255, 255);
GlStateManager.func_179147_l();
@@ -1099,6 +1087,7 @@
@@ -1099,6 +1092,7 @@
this.func_175029_a(Blocks.field_185779_df, TileEntityStructure.Mode.LOAD.func_185110_a(), "structure_block");
this.func_175029_a(Blocks.field_185779_df, TileEntityStructure.Mode.CORNER.func_185110_a(), "structure_block");
this.func_175029_a(Blocks.field_185779_df, TileEntityStructure.Mode.DATA.func_185110_a(), "structure_block");
@@ -0,0 +1,11 @@
--- ../src-base/minecraft/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java
@@ -53,7 +53,7 @@
float f1 = 0.375F;
GlStateManager.func_179152_a(0.375F, -0.375F, 0.375F);
}
- else if (item == Items.field_151031_f)
+ else if (item instanceof net.minecraft.item.ItemBow)
{
GlStateManager.func_179109_b(0.0F, 0.125F, -0.125F);
GlStateManager.func_179114_b(-45.0F, 0.0F, 1.0F, 0.0F);
@@ -0,0 +1,13 @@
--- ../src-base/minecraft/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/texture/LayeredColorMaskTexture.java
@@ -71,9 +71,7 @@
if (s != null)
{
- iresource1 = p_110551_1_.func_110536_a(new ResourceLocation(s));
- BufferedImage bufferedimage2 = TextureUtil.func_177053_a(iresource1.func_110527_b());
-
+ BufferedImage bufferedimage2 = net.minecraftforge.client.MinecraftForgeClient.getImageLayer(new ResourceLocation(s), p_110551_1_);
if (bufferedimage2.getWidth() == bufferedimage.getWidth() && bufferedimage2.getHeight() == bufferedimage.getHeight() && bufferedimage2.getType() == 6)
{
for (int l = 0; l < bufferedimage2.getHeight(); ++l)
@@ -25,7 +25,7 @@
p_174943_2_.func_177059_a(this);
this.func_110569_e();
this.func_147631_c();
@@ -88,13 +99,55 @@
@@ -88,29 +99,74 @@
this.field_94258_i.clear();
int j = Integer.MAX_VALUE;
int k = 1 << this.field_147636_j;
@@ -58,8 +58,9 @@
+ {
+ if(location.equals(loading))
+ {
+ final String error = "circular model dependencies, stack: [" + com.google.common.base.Joiner.on(", ").join(loadingSprites) + "]";
+ final String error = "circular texture dependencies, stack: [" + com.google.common.base.Joiner.on(", ").join(loadingSprites) + "]";
+ net.minecraftforge.fml.client.FMLClientHandler.instance().trackBrokenTexture(resourcelocation, error);
+ return j;
+ }
+ }
+ loadingSprites.addLast(location);
@@ -74,6 +75,8 @@
+ TextureAtlasSprite depSprite = field_110574_e.get(dependency.toString());
+ j = loadTexture(stitcher, p_110571_1_, dependency, depSprite, bar, j, k);
+ }
try
{
+ if (textureatlassprite.hasCustomLoader(p_110571_1_, resourcelocation))
+ {
+ if (textureatlassprite.load(p_110571_1_, resourcelocation, l -> field_110574_e.get(l.toString())))
@@ -82,11 +85,13 @@
+ }
+ }
+ else
try
{
+ {
PngSizeInfo pngsizeinfo = PngSizeInfo.func_188532_a(p_110571_1_.func_110536_a(resourcelocation));
@@ -104,13 +157,13 @@
iresource = p_110571_1_.func_110536_a(resourcelocation);
boolean flag = iresource.func_110526_a("animation") != null;
textureatlassprite.func_188538_a(pngsizeinfo, flag);
}
+ }
catch (RuntimeException runtimeexception)
{
- field_147635_d.error("Unable to parse metadata from {}", resourcelocation, runtimeexception);
@@ -103,7 +108,7 @@
}
finally
{
@@ -122,16 +175,28 @@
@@ -122,16 +178,28 @@
if (j1 < k)
{
@@ -134,7 +139,7 @@
if (i1 < this.field_147636_j)
{
field_147635_d.warn("{}: dropping miplevel from {} to {}, because of minimum power of two: {}", this.field_94254_c, Integer.valueOf(this.field_147636_j), Integer.valueOf(i1), Integer.valueOf(l));
@@ -140,9 +205,11 @@
@@ -140,9 +208,11 @@
this.field_94249_f.func_147963_d(this.field_147636_j);
stitcher.func_110934_a(this.field_94249_f);
@@ -146,7 +151,7 @@
stitcher.func_94305_f();
}
catch (StitcherException stitcherexception)
@@ -151,12 +218,16 @@
@@ -151,12 +221,16 @@
}
field_147635_d.info("Created: {}x{} {}-atlas", Integer.valueOf(stitcher.func_110935_a()), Integer.valueOf(stitcher.func_110936_b()), this.field_94254_c);
@@ -164,7 +169,7 @@
{
String s = textureatlassprite1.func_94215_i();
map.remove(s);
@@ -186,6 +257,8 @@
@@ -186,6 +260,8 @@
{
textureatlassprite2.func_94217_a(this.field_94249_f);
}
@@ -173,7 +178,7 @@
}
private boolean func_184397_a(IResourceManager p_184397_1_, final TextureAtlasSprite p_184397_2_)
@@ -195,7 +268,7 @@
@@ -195,7 +271,7 @@
label62:
{
boolean flag;
@@ -182,7 +187,7 @@
try
{
iresource = p_184397_1_.func_110536_a(resourcelocation);
@@ -292,7 +365,7 @@
@@ -292,7 +368,7 @@
}
else
{
@@ -191,7 +196,7 @@
if (textureatlassprite == null)
{
@@ -318,4 +391,52 @@
@@ -318,4 +394,52 @@
{
return this.field_94249_f;
}
@@ -1,5 +1,14 @@
--- ../src-base/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/texture/TextureUtil.java
@@ -63,7 +63,7 @@
{
boolean flag = false;
- for (int i = 0; i < p_147949_2_.length; ++i)
+ for (int i = 0; i < p_147949_2_[0].length; ++i)
{
if (p_147949_2_[0][i] >> 24 == 0)
{
@@ -83,6 +83,7 @@
int[] aint1 = aint[l1 - 1];
int[] aint2 = new int[aint1.length >> 2];
@@ -9,7 +9,7 @@
}
public void func_190056_a(World p_190056_1_, TextureManager p_190056_2_, FontRenderer p_190056_3_, Entity p_190056_4_, RayTraceResult p_190056_5_, float p_190056_6_)
@@ -117,12 +117,15 @@
@@ -117,13 +117,17 @@
{
if (p_180546_1_.func_145835_a(this.field_147560_j, this.field_147561_k, this.field_147558_l) < p_180546_1_.func_145833_n())
{
@@ -23,9 +23,11 @@
GlStateManager.func_179131_c(1.0F, 1.0F, 1.0F, 1.0F);
+ }
BlockPos blockpos = p_180546_1_.func_174877_v();
+ if (this.field_147550_f.func_175668_a(blockpos, false)) // Forge: fix MC-123363
this.func_192854_a(p_180546_1_, (double)blockpos.func_177958_n() - field_147554_b, (double)blockpos.func_177956_o() - field_147555_c, (double)blockpos.func_177952_p() - field_147552_d, p_180546_2_, p_180546_3_, 1.0F);
}
@@ -146,6 +149,9 @@
}
@@ -146,6 +150,9 @@
{
try
{
@@ -35,7 +37,7 @@
tileentityspecialrenderer.func_192841_a(p_192854_1_, p_192854_2_, p_192854_4_, p_192854_6_, p_192854_8_, p_192854_9_, p_192854_10_);
}
catch (Throwable throwable)
@@ -172,4 +178,53 @@
@@ -172,4 +179,53 @@
{
return this.field_147557_n;
}
@@ -0,0 +1,22 @@
--- ../src-base/minecraft/net/minecraft/client/resources/ResourcePackRepository.java
+++ ../src-work/minecraft/net/minecraft/client/resources/ResourcePackRepository.java
@@ -310,9 +310,10 @@
private boolean func_190113_a(String p_190113_1_, File p_190113_2_)
{
+ InputStream is = null;
try
{
- String s = DigestUtils.sha1Hex((InputStream)(new FileInputStream(p_190113_2_)));
+ String s = DigestUtils.sha1Hex(is = (InputStream)(new FileInputStream(p_190113_2_)));
if (p_190113_1_.isEmpty())
{
@@ -332,6 +333,7 @@
{
field_177320_c.warn("File {} couldn't be hashed.", p_190113_2_, ioexception);
}
+ finally { IOUtils.closeQuietly(is); } // Forge: close stream after use
return false;
}
@@ -34,7 +34,24 @@
}
if (p_74306_1_ == GameSettings.Options.GRAPHICS)
@@ -1068,7 +1070,12 @@
@@ -724,6 +726,7 @@
public void func_74300_a()
{
+ FileInputStream fileInputStream = null; // Forge: fix MC-151173
try
{
if (!this.field_74354_ai.exists())
@@ -732,7 +735,7 @@
}
this.field_186714_aM.clear();
- List<String> list = IOUtils.readLines(new FileInputStream(this.field_74354_ai));
+ List<String> list = IOUtils.readLines(fileInputStream = new FileInputStream(this.field_74354_ai), StandardCharsets.UTF_8); // Forge: fix MC-117449, MC-151173
NBTTagCompound nbttagcompound = new NBTTagCompound();
for (String s : list)
@@ -1068,7 +1071,12 @@
{
if (s1.equals("key_" + keybinding.func_151464_g()))
{
@@ -48,7 +65,15 @@
}
}
@@ -1132,6 +1139,7 @@
@@ -1100,6 +1108,7 @@
{
field_151454_ax.error("Failed to load options", (Throwable)exception);
}
+ finally { IOUtils.closeQuietly(fileInputStream); } // Forge: fix MC-151173
}
private NBTTagCompound func_189988_a(NBTTagCompound p_189988_1_)
@@ -1132,6 +1141,7 @@
public void func_74303_b()
{
@@ -56,7 +81,7 @@
PrintWriter printwriter = null;
try
@@ -1206,7 +1214,8 @@
@@ -1206,7 +1216,8 @@
for (KeyBinding keybinding : this.field_74324_K)
{
@@ -66,7 +91,7 @@
}
for (SoundCategory soundcategory : SoundCategory.values())
@@ -1440,4 +1449,35 @@
@@ -1440,4 +1451,35 @@
return p_148264_1_;
}
}
@@ -0,0 +1,10 @@
--- ../src-base/minecraft/net/minecraft/command/CommandGameRule.java
+++ ../src-work/minecraft/net/minecraft/command/CommandGameRule.java
@@ -73,6 +73,7 @@
entityplayermp.field_71135_a.func_147359_a(new SPacketEntityStatus(entityplayermp, b0));
}
}
+ net.minecraftforge.event.ForgeEventFactory.onGameRuleChange(p_184898_0_, p_184898_1_, p_184898_2_);
}
public List<String> func_184883_a(MinecraftServer p_184883_1_, ICommandSender p_184883_2_, String[] p_184883_3_, @Nullable BlockPos p_184883_4_)
@@ -44,7 +44,7 @@
return this.field_78033_n < 6;
}
@@ -260,4 +282,45 @@
@@ -260,4 +282,50 @@
item.func_150895_a(this, p_78018_1_);
}
}
@@ -88,5 +88,10 @@
+ public net.minecraft.util.ResourceLocation getBackgroundImage()
+ {
+ return new net.minecraft.util.ResourceLocation("textures/gui/container/creative_inventory/tab_" + this.func_78015_f());
+ }
+
+ public int getLabelColor()
+ {
+ return 4210752;
+ }
}
@@ -46,7 +46,23 @@
public int func_145782_y()
{
return this.field_145783_c;
@@ -1053,7 +1065,7 @@
@@ -344,6 +356,7 @@
this.field_70165_t = p_70107_1_;
this.field_70163_u = p_70107_3_;
this.field_70161_v = p_70107_5_;
+ if (this.isAddedToWorld() && !this.field_70170_p.field_72995_K) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
float f = this.field_70130_N / 2.0F;
float f1 = this.field_70131_O;
this.func_174826_a(new AxisAlignedBB(p_70107_1_ - (double)f, p_70107_3_, p_70107_5_ - (double)f, p_70107_1_ + (double)f, p_70107_3_ + (double)f1, p_70107_5_ + (double)f));
@@ -995,6 +1008,7 @@
this.field_70165_t = (axisalignedbb.field_72340_a + axisalignedbb.field_72336_d) / 2.0D;
this.field_70163_u = axisalignedbb.field_72338_b;
this.field_70161_v = (axisalignedbb.field_72339_c + axisalignedbb.field_72334_f) / 2.0D;
+ if (this.isAddedToWorld() && !this.field_70170_p.field_72995_K) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
}
protected SoundEvent func_184184_Z()
@@ -1053,7 +1067,7 @@
protected void func_180429_a(BlockPos p_180429_1_, Block p_180429_2_)
{
@@ -55,7 +71,7 @@
if (this.field_70170_p.func_180495_p(p_180429_1_.func_177984_a()).func_177230_c() == Blocks.field_150431_aC)
{
@@ -1259,6 +1271,7 @@
@@ -1259,6 +1273,7 @@
BlockPos blockpos = new BlockPos(i, j, k);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos);
@@ -63,7 +79,7 @@
if (iblockstate.func_185901_i() != EnumBlockRenderType.INVISIBLE)
{
this.field_70170_p.func_175688_a(EnumParticleTypes.BLOCK_CRACK, this.field_70165_t + ((double)this.field_70146_Z.nextFloat() - 0.5D) * (double)this.field_70130_N, this.func_174813_aQ().field_72338_b + 0.1D, this.field_70161_v + ((double)this.field_70146_Z.nextFloat() - 0.5D) * (double)this.field_70130_N, -this.field_70159_w * 4.0D, 1.5D, -this.field_70179_y * 4.0D, Block.func_176210_f(iblockstate));
@@ -1277,12 +1290,12 @@
@@ -1277,12 +1292,12 @@
BlockPos blockpos = new BlockPos(this.field_70165_t, d0, this.field_70161_v);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos);
@@ -80,7 +96,15 @@
}
else
{
@@ -1707,6 +1720,7 @@
@@ -1382,6 +1397,7 @@
this.field_70126_B -= 360.0F;
}
+ if (!this.field_70170_p.field_72995_K) this.field_70170_p.func_72964_e((int) Math.floor(this.field_70165_t) >> 4, (int) Math.floor(this.field_70161_v) >> 4); // Forge - ensure target chunk is loaded.
this.func_70107_b(this.field_70165_t, this.field_70163_u, this.field_70161_v);
this.func_70101_b(p_70080_7_, p_70080_8_);
}
@@ -1707,6 +1723,7 @@
{
p_189511_1_.func_74757_a("Glowing", this.field_184238_ar);
}
@@ -88,7 +112,7 @@
if (!this.field_184236_aF.isEmpty())
{
@@ -1720,6 +1734,9 @@
@@ -1720,6 +1737,9 @@
p_189511_1_.func_74782_a("Tags", nbttaglist);
}
@@ -98,7 +122,7 @@
this.func_70014_b(p_189511_1_);
if (this.func_184207_aI())
@@ -1826,7 +1843,11 @@
@@ -1826,7 +1846,11 @@
this.func_174810_b(p_70020_1_.func_74767_n("Silent"));
this.func_189654_d(p_70020_1_.func_74767_n("NoGravity"));
this.func_184195_f(p_70020_1_.func_74767_n("Glowing"));
@@ -110,7 +134,7 @@
if (p_70020_1_.func_150297_b("Tags", 9))
{
this.field_184236_aF.clear();
@@ -1918,7 +1939,10 @@
@@ -1918,7 +1942,10 @@
{
EntityItem entityitem = new EntityItem(this.field_70170_p, this.field_70165_t, this.field_70163_u + (double)p_70099_2_, this.field_70161_v, p_70099_1_);
entityitem.func_174869_p();
@@ -122,7 +146,7 @@
return entityitem;
}
}
@@ -1985,6 +2009,7 @@
@@ -1985,6 +2012,7 @@
this.field_70159_w = 0.0D;
this.field_70181_x = 0.0D;
this.field_70179_y = 0.0D;
@@ -130,7 +154,7 @@
this.func_70071_h_();
if (this.func_184218_aH())
@@ -2032,6 +2057,7 @@
@@ -2032,6 +2060,7 @@
}
}
@@ -138,7 +162,7 @@
if (p_184205_2_ || this.func_184228_n(p_184205_1_) && p_184205_1_.func_184219_q(this))
{
if (this.func_184218_aH())
@@ -2067,6 +2093,7 @@
@@ -2067,6 +2096,7 @@
if (this.field_184239_as != null)
{
Entity entity = this.field_184239_as;
@@ -146,7 +170,7 @@
this.field_184239_as = null;
entity.func_184225_p(this);
}
@@ -2509,8 +2536,16 @@
@@ -2509,8 +2539,16 @@
@Nullable
public Entity func_184204_a(int p_184204_1_)
{
@@ -163,7 +187,7 @@
this.field_70170_p.field_72984_F.func_76320_a("changeDimension");
MinecraftServer minecraftserver = this.func_184102_h();
int i = this.field_71093_bK;
@@ -2518,7 +2553,7 @@
@@ -2518,7 +2556,7 @@
WorldServer worldserver1 = minecraftserver.func_71218_a(p_184204_1_);
this.field_71093_bK = p_184204_1_;
@@ -172,7 +196,7 @@
{
worldserver1 = minecraftserver.func_71218_a(0);
this.field_71093_bK = 0;
@@ -2529,22 +2564,23 @@
@@ -2529,22 +2567,23 @@
this.field_70170_p.field_72984_F.func_76320_a("reposition");
BlockPos blockpos;
@@ -201,7 +225,7 @@
{
d0 = MathHelper.func_151237_a(d0 * 8.0D, worldserver1.func_175723_af().func_177726_b() + 16.0D, worldserver1.func_175723_af().func_177728_d() - 16.0D);
d1 = MathHelper.func_151237_a(d1 * 8.0D, worldserver1.func_175723_af().func_177736_c() + 16.0D, worldserver1.func_175723_af().func_177733_e() - 16.0D);
@@ -2554,8 +2590,7 @@
@@ -2554,8 +2593,7 @@
d1 = (double)MathHelper.func_76125_a((int)d1, -29999872, 29999872);
float f = this.field_70177_z;
this.func_70012_b(d0, this.field_70163_u, d1, 90.0F, 0.0F);
@@ -211,7 +235,7 @@
blockpos = new BlockPos(this);
}
@@ -2567,7 +2602,7 @@
@@ -2567,7 +2605,7 @@
{
entity.func_180432_n(this);
@@ -220,7 +244,7 @@
{
BlockPos blockpos1 = worldserver1.func_175672_r(worldserver1.func_175694_M());
entity.func_174828_a(blockpos1, entity.field_70177_z, entity.field_70125_A);
@@ -2604,7 +2639,7 @@
@@ -2604,7 +2642,7 @@
public float func_180428_a(Explosion p_180428_1_, World p_180428_2_, BlockPos p_180428_3_, IBlockState p_180428_4_)
{
@@ -229,12 +253,47 @@
}
public boolean func_174816_a(Explosion p_174816_1_, World p_174816_2_, BlockPos p_174816_3_, IBlockState p_174816_4_, float p_174816_5_)
@@ -2901,6 +2936,183 @@
@@ -2901,6 +2939,218 @@
EnchantmentHelper.func_151385_b(p_174815_1_, p_174815_2_);
}
+ /* ================================== Forge Start =====================================*/
+ /**
+ * Internal use for keeping track of entities that are tracked by a world, to
+ * allow guarantees that entity position changes will force a chunk load, avoiding
+ * potential issues with entity desyncing and bad chunk data.
+ */
+ private boolean isAddedToWorld;
+
+ /**
+ * Gets whether this entity has been added to a world (for tracking). Specifically
+ * between the times when an entity is added to a world and the entity being removed
+ * from the world's tracked lists. See {@link World#onEntityAdded(Entity)} and
+ * {@link World#onEntityRemoved(Entity)}.
+ *
+ * @return True if this entity is being tracked by a world
+ */
+ public final boolean isAddedToWorld() { return this.isAddedToWorld; }
+
+ /**
+ * Called after the entity has been added to the world's
+ * ticking list. Can be overriden, but needs to call super
+ * to prevent MC-136995.
+ */
+ public void onAddedToWorld() {
+ this.isAddedToWorld = true;
+ }
+
+ /**
+ * Called after the entity has been removed to the world's
+ * ticking list. Can be overriden, but needs to call super
+ * to prevent MC-136995.
+ */
+ public void onRemovedFromWorld() {
+ this.isAddedToWorld = false;
+ }
+
+ /**
+ * Returns a NBTTagCompound that can be used to store custom data for this entity.
+ * It will be written, and read from disc, so it persists over world saves.
+ * @return A NBTTagCompound
@@ -0,0 +1,10 @@
--- ../src-base/minecraft/net/minecraft/entity/EntityLeashKnot.java
+++ ../src-work/minecraft/net/minecraft/entity/EntityLeashKnot.java
@@ -43,6 +43,7 @@
this.field_70165_t = (double)this.field_174861_a.func_177958_n() + 0.5D;
this.field_70163_u = (double)this.field_174861_a.func_177956_o() + 0.5D;
this.field_70161_v = (double)this.field_174861_a.func_177952_p() + 0.5D;
+ if (this.isAddedToWorld() && !this.field_70170_p.field_72995_K) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
}
public void func_174859_a(EnumFacing p_174859_1_)
@@ -47,15 +47,16 @@
while (i > 0)
{
int j = EntityXPOrb.func_70527_a(i);
@@ -442,6 +445,7 @@
{
this.field_70755_b = p_70604_1_;
this.field_70756_c = this.field_70173_aa;
+ net.minecraftforge.common.ForgeHooks.onLivingSetAttackTarget(this, p_70604_1_);
}
@@ -602,7 +605,7 @@
public EntityLivingBase func_110144_aD()
@@ -670,8 +674,10 @@
if (!potioneffect.func_76455_a(this))
{
- if (!this.field_70170_p.field_72995_K)
+ if (!this.field_70170_p.field_72995_K && !net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.PotionEvent.PotionExpiryEvent(this, potioneffect)))
{
iterator.remove();
this.func_70688_c(potioneffect);
@@ -670,8 +673,10 @@
else
{
Collection<PotionEffect> collection = this.field_70713_bf.values();
@@ -68,7 +69,45 @@
this.func_82142_c(this.func_70644_a(MobEffects.field_76441_p));
}
}
@@ -819,6 +825,8 @@
@@ -703,7 +708,10 @@
while (iterator.hasNext())
{
- this.func_70688_c(iterator.next());
+ PotionEffect effect = iterator.next();
+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.PotionEvent.PotionRemoveEvent(this, effect))) continue;
+
+ this.func_70688_c(effect);
iterator.remove();
}
}
@@ -736,6 +744,7 @@
{
PotionEffect potioneffect = this.field_70713_bf.get(p_70690_1_.func_188419_a());
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.PotionEvent.PotionAddedEvent(this, potioneffect, p_70690_1_));
if (potioneffect == null)
{
this.field_70713_bf.put(p_70690_1_.func_188419_a(), p_70690_1_);
@@ -751,6 +760,9 @@
public boolean func_70687_e(PotionEffect p_70687_1_)
{
+ net.minecraftforge.event.entity.living.PotionEvent.PotionApplicableEvent event = new net.minecraftforge.event.entity.living.PotionEvent.PotionApplicableEvent(this, p_70687_1_);
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event);
+ if (event.getResult() != net.minecraftforge.fml.common.eventhandler.Event.Result.DEFAULT) return event.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW;
if (this.func_70668_bt() == EnumCreatureAttribute.UNDEAD)
{
Potion potion = p_70687_1_.func_188419_a();
@@ -777,6 +789,7 @@
public void func_184589_d(Potion p_184589_1_)
{
+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.PotionEvent.PotionRemoveEvent(this, p_184589_1_))) return;
PotionEffect potioneffect = this.func_184596_c(p_184589_1_);
if (potioneffect != null)
@@ -819,6 +832,8 @@
public void func_70691_i(float p_70691_1_)
{
@@ -77,7 +116,7 @@
float f = this.func_110143_aJ();
if (f > 0.0F)
@@ -839,6 +847,7 @@
@@ -839,6 +854,7 @@
public boolean func_70097_a(DamageSource p_70097_1_, float p_70097_2_)
{
@@ -85,7 +124,7 @@
if (this.func_180431_b(p_70097_1_))
{
return false;
@@ -927,9 +936,9 @@
@@ -927,9 +943,9 @@
this.field_70718_bc = 100;
this.field_70717_bb = (EntityPlayer)entity1;
}
@@ -97,7 +136,7 @@
if (entitywolf.func_70909_n())
{
@@ -1127,7 +1136,7 @@
@@ -1127,7 +1143,7 @@
public void func_70669_a(ItemStack p_70669_1_)
{
@@ -106,7 +145,7 @@
for (int i = 0; i < 5; ++i)
{
@@ -1139,12 +1148,17 @@
@@ -1139,12 +1155,17 @@
vec3d1 = vec3d1.func_178789_a(-this.field_70125_A * 0.017453292F);
vec3d1 = vec3d1.func_178785_b(-this.field_70177_z * 0.017453292F);
vec3d1 = vec3d1.func_72441_c(this.field_70165_t, this.field_70163_u + (double)this.func_70047_e(), this.field_70161_v);
@@ -125,7 +164,7 @@
if (!this.field_70729_aU)
{
Entity entity = p_70645_1_.func_76346_g();
@@ -1165,18 +1179,26 @@
@@ -1165,18 +1186,26 @@
if (!this.field_70170_p.field_72995_K)
{
@@ -157,7 +196,7 @@
}
this.field_70170_p.func_72960_a(this, (byte)3);
@@ -1195,6 +1217,9 @@
@@ -1195,6 +1224,9 @@
public void func_70653_a(Entity p_70653_1_, float p_70653_2_, double p_70653_3_, double p_70653_5_)
{
@@ -167,7 +206,7 @@
if (this.field_70146_Z.nextDouble() >= this.func_110148_a(SharedMonsterAttributes.field_111266_c).func_111126_e())
{
this.field_70160_al = true;
@@ -1253,15 +1278,7 @@
@@ -1253,15 +1285,7 @@
BlockPos blockpos = new BlockPos(i, j, k);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos);
Block block = iblockstate.func_177230_c();
@@ -184,7 +223,7 @@
}
}
@@ -1287,6 +1304,9 @@
@@ -1287,6 +1311,9 @@
public void func_180430_e(float p_180430_1_, float p_180430_2_)
{
@@ -194,7 +233,7 @@
super.func_180430_e(p_180430_1_, p_180430_2_);
PotionEffect potioneffect = this.func_70660_b(MobEffects.field_76430_j);
float f = potioneffect == null ? 0.0F : (float)(potioneffect.func_76458_c() + 1);
@@ -1303,7 +1323,7 @@
@@ -1303,7 +1330,7 @@
if (iblockstate.func_185904_a() != Material.field_151579_a)
{
@@ -203,7 +242,7 @@
this.func_184185_a(soundtype.func_185842_g(), soundtype.func_185843_a() * 0.5F, soundtype.func_185847_b() * 0.75F);
}
}
@@ -1380,17 +1400,20 @@
@@ -1380,17 +1407,20 @@
{
if (!this.func_180431_b(p_70665_1_))
{
@@ -225,7 +264,7 @@
this.func_110149_m(this.func_110139_bj() - p_70665_2_);
}
}
@@ -1447,6 +1470,11 @@
@@ -1447,6 +1477,11 @@
public void func_184609_a(EnumHand p_184609_1_)
{
@@ -237,7 +276,7 @@
if (!this.field_82175_bq || this.field_110158_av >= this.func_82166_i() / 2 || this.field_110158_av < 0)
{
this.field_110158_av = -1;
@@ -1694,7 +1722,7 @@
@@ -1694,7 +1729,7 @@
if (!this.field_70170_p.func_184143_b(axisalignedbb1))
{
@@ -246,7 +285,7 @@
{
this.func_70634_a(d11, this.field_70163_u + 1.0D, d12);
return;
@@ -1702,14 +1730,14 @@
@@ -1702,14 +1737,14 @@
BlockPos blockpos = new BlockPos(d11, this.field_70163_u - 1.0D, d12);
@@ -263,7 +302,7 @@
{
d1 = d11;
d13 = this.field_70163_u + 2.0D;
@@ -1781,16 +1809,17 @@
@@ -1781,16 +1816,17 @@
}
this.field_70160_al = true;
@@ -283,7 +322,7 @@
}
protected float func_189749_co()
@@ -1874,7 +1903,8 @@
@@ -1874,7 +1910,8 @@
if (this.field_70122_E)
{
@@ -293,7 +332,7 @@
}
float f7 = 0.16277136F / (f6 * f6 * f6);
@@ -1894,7 +1924,8 @@
@@ -1894,7 +1931,8 @@
if (this.field_70122_E)
{
@@ -303,7 +342,7 @@
}
if (this.func_70617_f_())
@@ -2054,6 +2085,7 @@
@@ -2054,6 +2092,7 @@
public void func_70071_h_()
{
@@ -311,7 +350,7 @@
super.func_70071_h_();
this.func_184608_ct();
@@ -2096,7 +2128,9 @@
@@ -2096,7 +2135,9 @@
if (!ItemStack.func_77989_b(itemstack1, itemstack))
{
@@ -321,7 +360,7 @@
if (!itemstack.func_190926_b())
{
@@ -2575,6 +2609,40 @@
@@ -2575,6 +2616,40 @@
this.field_70752_e = true;
}
@@ -338,7 +377,7 @@
+ {
+ PotionEffect effect = iterator.next();
+
+ if (effect.isCurativeItem(curativeItem))
+ if (effect.isCurativeItem(curativeItem) && !net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.living.PotionEvent.PotionRemoveEvent(this, effect)))
+ {
+ func_70688_c(effect);
+ iterator.remove();
@@ -362,7 +401,11 @@
public abstract EnumHandSide func_184591_cq();
public boolean func_184587_cr()
@@ -2595,12 +2663,19 @@
@@ -2592,15 +2667,23 @@
if (this.func_184587_cr())
{
ItemStack itemstack = this.func_184586_b(this.func_184600_cs());
+ if (net.minecraftforge.common.ForgeHooks.canContinueUsing(this.field_184627_bm, itemstack)) this.field_184627_bm = itemstack;
if (itemstack == this.field_184627_bm)
{
@@ -383,7 +426,7 @@
{
this.func_71036_o();
}
@@ -2618,8 +2693,10 @@
@@ -2618,8 +2701,10 @@
if (!itemstack.func_190926_b() && !this.func_184587_cr())
{
@@ -395,7 +438,7 @@
if (!this.field_70170_p.field_72995_K)
{
@@ -2700,7 +2777,10 @@
@@ -2700,7 +2785,10 @@
if (!this.field_184627_bm.func_190926_b() && this.func_184587_cr())
{
this.func_184584_a(this.field_184627_bm, 16);
@@ -407,7 +450,7 @@
this.func_184602_cy();
}
}
@@ -2724,7 +2804,8 @@
@@ -2724,7 +2812,8 @@
{
if (!this.field_184627_bm.func_190926_b())
{
@@ -417,7 +460,7 @@
}
this.func_184602_cy();
@@ -2852,6 +2933,31 @@
@@ -2852,6 +2941,31 @@
return true;
}
@@ -449,7 +492,7 @@
public boolean func_190631_cK()
{
return true;
@@ -2861,4 +2967,30 @@
@@ -2861,4 +2975,30 @@
public void func_191987_a(BlockPos p_191987_1_, boolean p_191987_2_)
{
}
@@ -0,0 +1,11 @@
--- ../src-base/minecraft/net/minecraft/entity/NpcMerchant.java
+++ ../src-work/minecraft/net/minecraft/entity/NpcMerchant.java
@@ -41,7 +41,7 @@
@Nullable
public MerchantRecipeList func_70934_b(EntityPlayer p_70934_1_)
{
- return this.field_70936_c;
+ return net.minecraftforge.event.ForgeEventFactory.listTradeOffers(this, p_70934_1_, this.field_70936_c);
}
public void func_70930_a(@Nullable MerchantRecipeList p_70930_1_)
@@ -0,0 +1,11 @@
--- ../src-base/minecraft/net/minecraft/entity/ai/EntityAIAttackRangedBow.java
+++ ../src-work/minecraft/net/minecraft/entity/ai/EntityAIAttackRangedBow.java
@@ -40,7 +40,7 @@
protected boolean func_188498_f()
{
- return !this.field_188499_a.func_184614_ca().func_190926_b() && this.field_188499_a.func_184614_ca().func_77973_b() == Items.field_151031_f;
+ return !this.field_188499_a.func_184614_ca().func_190926_b() && this.field_188499_a.func_184614_ca().func_77973_b() instanceof ItemBow;
}
public boolean func_75253_b()
@@ -1,6 +1,19 @@
--- ../src-base/minecraft/net/minecraft/entity/item/EntityBoat.java
+++ ../src-work/minecraft/net/minecraft/entity/item/EntityBoat.java
@@ -508,7 +508,7 @@
@@ -449,6 +449,12 @@
blockpos$pooledmutableblockpos.func_181079_c(l1, k1, i2);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos$pooledmutableblockpos);
+ Boolean result = iblockstate.func_177230_c().isAABBInsideMaterial(field_70170_p, blockpos$pooledmutableblockpos, new AxisAlignedBB(blockpos$pooledmutableblockpos), Material.field_151586_h);
+ if (result != null) {
+ if (!result) continue;
+ f = Math.max(f, iblockstate.func_177230_c().getBlockLiquidHeight(field_70170_p, blockpos$pooledmutableblockpos, iblockstate, Material.field_151586_h) + blockpos$pooledmutableblockpos.func_177956_o());
+ }
+
if (iblockstate.func_185904_a() == Material.field_151586_h)
{
f = Math.max(f, BlockLiquid.func_190973_f(iblockstate, this.field_70170_p, blockpos$pooledmutableblockpos));
@@ -508,7 +514,7 @@
if (!list.isEmpty())
{
@@ -9,7 +22,42 @@
++k1;
}
@@ -980,4 +980,20 @@
@@ -551,6 +557,15 @@
blockpos$pooledmutableblockpos.func_181079_c(k1, l1, i2);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos$pooledmutableblockpos);
+ Boolean result = iblockstate.func_177230_c().isAABBInsideMaterial(field_70170_p, blockpos$pooledmutableblockpos, axisalignedbb, Material.field_151586_h);
+ if (result != null) {
+ if (!result) continue;
+
+ float f = iblockstate.func_177230_c().getBlockLiquidHeight(field_70170_p, blockpos$pooledmutableblockpos, iblockstate, Material.field_151586_h) + blockpos$pooledmutableblockpos.func_177956_o();
+ this.field_184465_aD = Math.max((double)f, this.field_184465_aD);
+ flag |= axisalignedbb.field_72338_b < (double)f;
+ }
+
if (iblockstate.func_185904_a() == Material.field_151586_h)
{
float f = BlockLiquid.func_190972_g(iblockstate, this.field_70170_p, blockpos$pooledmutableblockpos);
@@ -594,6 +609,18 @@
blockpos$pooledmutableblockpos.func_181079_c(k1, l1, i2);
IBlockState iblockstate = this.field_70170_p.func_180495_p(blockpos$pooledmutableblockpos);
+ Boolean result = iblockstate.func_177230_c().isAABBInsideMaterial(field_70170_p, blockpos$pooledmutableblockpos, axisalignedbb, Material.field_151586_h);
+ if (result != null) {
+ if (!result) continue;
+
+ if(iblockstate.func_177230_c().getBlockLiquidHeight(field_70170_p, blockpos$pooledmutableblockpos, iblockstate, Material.field_151586_h) > 0)
+ {
+ blockpos$pooledmutableblockpos.func_185344_t();
+ return EntityBoat.Status.UNDER_FLOWING_WATER;
+ } else
+ continue;
+ }
+
if (iblockstate.func_185904_a() == Material.field_151586_h && d0 < (double)BlockLiquid.func_190972_g(iblockstate, this.field_70170_p, blockpos$pooledmutableblockpos))
{
if (((Integer)iblockstate.func_177229_b(BlockLiquid.field_176367_b)).intValue() != 0)
@@ -980,4 +1007,20 @@
return values()[0];
}
}
@@ -8,7 +8,15 @@
if (!flag1 && BlockFalling.func_185759_i(this.field_70170_p.func_180495_p(new BlockPos(this.field_70165_t, this.field_70163_u - 0.009999999776482582D, this.field_70161_v))))
{
this.field_70122_E = false;
@@ -189,7 +190,7 @@
@@ -182,14 +183,14 @@
if (!this.field_145808_f)
{
- if (this.field_70170_p.func_190527_a(block, blockpos1, true, EnumFacing.UP, (Entity)null) && (flag1 || !BlockFalling.func_185759_i(this.field_70170_p.func_180495_p(blockpos1.func_177977_b()))) && this.field_70170_p.func_180501_a(blockpos1, this.field_175132_d, 3))
+ if (this.field_70170_p.func_190527_a(block, blockpos1, true, EnumFacing.UP, this) && (flag1 || !BlockFalling.func_185759_i(this.field_70170_p.func_180495_p(blockpos1.func_177977_b()))) && this.field_70170_p.func_180501_a(blockpos1, this.field_175132_d, 3))
{
if (block instanceof BlockFalling)
{
((BlockFalling)block).func_176502_a_(this.field_70170_p, blockpos1, this.field_175132_d, iblockstate);
}
@@ -19,7 +19,7 @@
if (this.func_180431_b(p_70097_1_))
{
return false;
@@ -208,6 +211,7 @@
@@ -208,14 +211,16 @@
{
if (this.field_70532_c == 0 && p_70100_1_.field_71090_bL == 0)
{
@@ -27,3 +27,25 @@
p_70100_1_.field_71090_bL = 2;
p_70100_1_.func_71001_a(this, 1);
ItemStack itemstack = EnchantmentHelper.func_92099_a(Enchantments.field_185296_A, p_70100_1_);
if (!itemstack.func_190926_b() && itemstack.func_77951_h())
{
- int i = Math.min(this.func_184514_c(this.field_70530_e), itemstack.func_77952_i());
- this.field_70530_e -= this.func_184515_b(i);
+ float ratio = itemstack.func_77973_b().getXpRepairRatio(itemstack);
+ int i = Math.min(roundAverage(this.field_70530_e * ratio), itemstack.func_77952_i());
+ this.field_70530_e -= roundAverage(i / ratio);
itemstack.func_77964_b(itemstack.func_77952_i() - i);
}
@@ -337,4 +342,10 @@
{
return false;
}
+
+ private static int roundAverage(float value)
+ {
+ double floor = Math.floor(value);
+ return (int) floor + (Math.random() < value - floor ? 1 : 0);
+ }
}
@@ -0,0 +1,20 @@
--- ../src-base/minecraft/net/minecraft/entity/monster/AbstractSkeleton.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/AbstractSkeleton.java
@@ -192,7 +192,7 @@
this.field_70714_bg.func_85156_a(this.field_85037_d);
ItemStack itemstack = this.func_184614_ca();
- if (itemstack.func_77973_b() == Items.field_151031_f)
+ if (itemstack.func_77973_b() instanceof net.minecraft.item.ItemBow)
{
int i = 20;
@@ -214,6 +214,8 @@
public void func_82196_d(EntityLivingBase p_82196_1_, float p_82196_2_)
{
EntityArrow entityarrow = this.func_190726_a(p_82196_2_);
+ if (this.func_184614_ca().func_77973_b() instanceof net.minecraft.item.ItemBow)
+ entityarrow = ((net.minecraft.item.ItemBow) this.func_184614_ca().func_77973_b()).customizeArrow(entityarrow);
double d0 = p_82196_1_.field_70165_t - this.field_70165_t;
double d1 = p_82196_1_.func_174813_aQ().field_72338_b + (double)(p_82196_1_.field_70131_O / 3.0F) - entityarrow.field_70163_u;
double d2 = p_82196_1_.field_70161_v - this.field_70161_v;
@@ -39,6 +39,15 @@
{
return false;
}
@@ -508,7 +522,7 @@
IBlockState iblockstate1 = world.func_180495_p(blockpos.func_177977_b());
IBlockState iblockstate2 = this.field_179475_a.func_175489_ck();
- if (iblockstate2 != null && this.func_188518_a(world, blockpos, iblockstate2.func_177230_c(), iblockstate, iblockstate1))
+ if (iblockstate2 != null && this.func_188518_a(world, blockpos, iblockstate2.func_177230_c(), iblockstate, iblockstate1) && net.minecraftforge.event.ForgeEventFactory.onBlockPlace(field_179475_a, new net.minecraftforge.common.util.BlockSnapshot(world, blockpos, iblockstate2), net.minecraft.util.EnumFacing.UP).isCanceled())
{
world.func_180501_a(blockpos, iblockstate2, 3);
this.field_179475_a.func_175490_a((IBlockState)null);
@@ -551,7 +565,7 @@
{
return false;
@@ -1,6 +1,6 @@
--- ../src-base/minecraft/net/minecraft/entity/monster/EntityEvoker.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntityEvoker.java
@@ -369,7 +369,7 @@
@@ -365,7 +365,7 @@
{
return false;
}
@@ -0,0 +1,11 @@
--- ../src-base/minecraft/net/minecraft/entity/monster/EntityIllusionIllager.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntityIllusionIllager.java
@@ -214,6 +214,8 @@
public void func_82196_d(EntityLivingBase p_82196_1_, float p_82196_2_)
{
EntityArrow entityarrow = this.func_193097_t(p_82196_2_);
+ if (this.func_184614_ca().func_77973_b() instanceof net.minecraft.item.ItemBow)
+ entityarrow = ((net.minecraft.item.ItemBow) this.func_184614_ca().func_77973_b()).customizeArrow(entityarrow);
double d0 = p_82196_1_.field_70165_t - this.field_70165_t;
double d1 = p_82196_1_.func_174813_aQ().field_72338_b + (double)(p_82196_1_.field_70131_O / 3.0F) - entityarrow.field_70163_u;
double d2 = p_82196_1_.field_70161_v - this.field_70161_v;
@@ -1,6 +1,14 @@
--- ../src-base/minecraft/net/minecraft/entity/monster/EntityShulker.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntityShulker.java
@@ -426,6 +426,13 @@
@@ -311,6 +311,7 @@
this.field_70165_t = (double)blockpos.func_177958_n() + 0.5D;
this.field_70163_u = (double)blockpos.func_177956_o();
this.field_70161_v = (double)blockpos.func_177952_p() + 0.5D;
+ if (this.isAddedToWorld() && !this.field_70170_p.field_72995_K) this.field_70170_p.func_72866_a(this, false); // Forge - Process chunk registration after moving.
this.field_70169_q = this.field_70165_t;
this.field_70167_r = this.field_70163_u;
this.field_70166_s = this.field_70161_v;
@@ -426,6 +427,13 @@
if (flag)
{
@@ -0,0 +1,17 @@
--- ../src-base/minecraft/net/minecraft/entity/monster/EntitySpider.java
+++ ../src-work/minecraft/net/minecraft/entity/monster/EntitySpider.java
@@ -139,7 +139,13 @@
public boolean func_70687_e(PotionEffect p_70687_1_)
{
- return p_70687_1_.func_188419_a() == MobEffects.field_76436_u ? false : super.func_70687_e(p_70687_1_);
+ if(p_70687_1_.func_188419_a() == MobEffects.field_76436_u)
+ {
+ net.minecraftforge.event.entity.living.PotionEvent.PotionApplicableEvent event = new net.minecraftforge.event.entity.living.PotionEvent.PotionApplicableEvent(this, p_70687_1_);
+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event);
+ return event.getResult() == net.minecraftforge.fml.common.eventhandler.Event.Result.ALLOW;
+ }
+ return super.func_70687_e(p_70687_1_);
}
public boolean func_70841_p()
@@ -37,6 +37,15 @@
if (p_70037_1_.func_150297_b("ConversionTime", 99) && p_70037_1_.func_74762_e("ConversionTime") > -1)
{
@@ -91,7 +101,7 @@
@Nullable
public IEntityLivingData func_180482_a(DifficultyInstance p_180482_1_, @Nullable IEntityLivingData p_180482_2_)
{
- this.func_190733_a(this.field_70170_p.field_73012_v.nextInt(6));
+ net.minecraftforge.fml.common.registry.VillagerRegistry.setRandomProfession(this, this.field_70170_p.field_73012_v);
return super.func_180482_a(p_180482_1_, p_180482_2_);
}
@@ -175,7 +185,7 @@
{
EntityVillager entityvillager = new EntityVillager(this.field_70170_p);
@@ -122,7 +122,13 @@
}
else
{
@@ -617,15 +656,13 @@
@@ -612,20 +651,18 @@
this.func_175554_cu();
}
- return this.field_70963_i;
+ return net.minecraftforge.event.ForgeEventFactory.listTradeOffers(this, p_70934_1_, field_70963_i);
}
private void func_175554_cu()
{
@@ -349,7 +349,7 @@
}
- if (this.field_70170_p.func_72935_r())
+ if (!net.minecraftforge.event.ForgeEventFactory.fireSleepingTimeCheck(this, this.field_71081_bT))
+ if (!net.minecraftforge.event.ForgeEventFactory.fireSleepingTimeCheck(this, p_180469_1_))
{
return EntityPlayer.SleepResult.NOT_POSSIBLE_NOW;
}
@@ -0,0 +1,28 @@
--- ../src-base/minecraft/net/minecraft/item/EnumRarity.java
+++ ../src-work/minecraft/net/minecraft/item/EnumRarity.java
@@ -2,7 +2,7 @@
import net.minecraft.util.text.TextFormatting;
-public enum EnumRarity
+public enum EnumRarity implements net.minecraftforge.common.IRarity
{
COMMON(TextFormatting.WHITE, "Common"),
UNCOMMON(TextFormatting.YELLOW, "Uncommon"),
@@ -17,4 +17,16 @@
this.field_77937_e = p_i45349_3_;
this.field_77934_f = p_i45349_4_;
}
+
+ @Override
+ public TextFormatting getColor()
+ {
+ return this.field_77937_e;
+ }
+
+ @Override
+ public String getName()
+ {
+ return this.field_77934_f;
+ }
}
@@ -38,7 +38,15 @@
public boolean func_77634_r()
{
return this.field_77700_c != null;
@@ -372,7 +375,7 @@
@@ -365,6 +368,7 @@
return p_77636_1_.func_77948_v();
}
+ @Deprecated // use Forge version
public EnumRarity func_77613_e(ItemStack p_77613_1_)
{
return p_77613_1_.func_77948_v() ? EnumRarity.RARE : EnumRarity.COMMON;
@@ -372,7 +376,7 @@
public boolean func_77616_k(ItemStack p_77616_1_)
{
@@ -47,7 +55,7 @@
}
protected RayTraceResult func_77621_a(World p_77621_1_, EntityPlayer p_77621_2_, boolean p_77621_3_)
@@ -389,8 +392,8 @@
@@ -389,8 +393,8 @@
float f5 = MathHelper.func_76126_a(-f * 0.017453292F);
float f6 = f3 * f4;
float f7 = f2 * f4;
@@ -58,7 +66,7 @@
return p_77621_1_.func_147447_a(vec3d, vec3d1, p_77621_3_, !p_77621_3_, false);
}
@@ -409,6 +412,9 @@
@@ -409,6 +413,9 @@
protected boolean func_194125_a(CreativeTabs p_194125_1_)
{
@@ -68,7 +76,7 @@
CreativeTabs creativetabs = this.func_77640_w();
return creativetabs != null && (p_194125_1_ == CreativeTabs.field_78027_g || p_194125_1_ == creativetabs);
}
@@ -435,11 +441,757 @@
@@ -435,11 +442,784 @@
return false;
}
@@ -150,6 +158,15 @@
+ }
+
+ /**
+ * Determines the amount of durability the mending enchantment
+ * will repair, on average, per point of experience.
+ */
+ public float getXpRepairRatio(ItemStack stack)
+ {
+ return 2f;
+ }
+
+ /**
+ * Override this method to change the NBT data being sent to the client.
+ * You should ONLY override this when you have no other choice, as this might change behavior client side!
+ *
@@ -689,6 +706,19 @@
+ }
+
+ /**
+ * Called while an item is in 'active' use to determine if usage should continue.
+ * Allows items to continue being used while sustaining damage, for example.
+ *
+ * @param oldStack the previous 'active' stack
+ * @param newStack the stack currently in the active hand
+ * @return true to set the new stack to active and continue using it
+ */
+ public boolean canContinueUsing(ItemStack oldStack, ItemStack newStack)
+ {
+ return oldStack.equals(newStack);
+ }
+
+ /**
+ * Called to get the Mod ID of the mod that *created* the ItemStack,
+ * instead of the real Mod ID that *registered* it.
+ *
@@ -819,14 +849,19 @@
+ public void setTileEntityItemStackRenderer(@Nullable net.minecraft.client.renderer.tileentity.TileEntityItemStackRenderer teisr)
+ {
+ this.teisr = teisr;
+ }
+ }
+
+ public net.minecraftforge.common.IRarity getForgeRarity(ItemStack stack)
+ {
+ return this.func_77613_e(stack);
+ }
+
+ /* ======================================== FORGE END =====================================*/
+
public static void func_150900_l()
{
func_179214_a(Blocks.field_150350_a, new ItemAir(Blocks.field_150350_a));
@@ -999,6 +1751,8 @@
@@ -999,6 +1779,8 @@
private final float field_78010_h;
private final float field_78011_i;
private final int field_78008_j;
@@ -835,7 +870,7 @@
private ToolMaterial(int p_i1874_3_, int p_i1874_4_, float p_i1874_5_, float p_i1874_6_, int p_i1874_7_)
{
@@ -1034,6 +1788,7 @@
@@ -1034,6 +1816,7 @@
return this.field_78008_j;
}
@@ -843,7 +878,7 @@
public Item func_150995_f()
{
if (this == WOOD)
@@ -1057,5 +1812,21 @@
@@ -1057,5 +1840,21 @@
return this == DIAMOND ? Items.field_151045_i : null;
}
}
@@ -1,7 +1,11 @@
--- ../src-base/minecraft/net/minecraft/item/ItemBlock.java
+++ ../src-work/minecraft/net/minecraft/item/ItemBlock.java
@@ -49,24 +49,12 @@
if (!itemstack.func_190926_b() && p_180614_1_.func_175151_a(p_180614_3_, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(this.field_150939_a, p_180614_3_, false, p_180614_5_, (Entity)null))
@@ -46,27 +46,15 @@
ItemStack itemstack = p_180614_1_.func_184586_b(p_180614_4_);
- if (!itemstack.func_190926_b() && p_180614_1_.func_175151_a(p_180614_3_, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(this.field_150939_a, p_180614_3_, false, p_180614_5_, (Entity)null))
+ if (!itemstack.func_190926_b() && p_180614_1_.func_175151_a(p_180614_3_, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(this.field_150939_a, p_180614_3_, false, p_180614_5_, p_180614_1_))
{
int i = this.func_77647_b(itemstack.func_77960_j());
- IBlockState iblockstate1 = this.field_150939_a.func_180642_a(p_180614_2_, p_180614_3_, p_180614_5_, p_180614_6_, p_180614_7_, p_180614_8_, i, p_180614_1_);
@@ -37,6 +41,15 @@
{
p_179222_3_ = EnumFacing.UP;
}
@@ -136,7 +124,7 @@
p_179222_2_ = p_179222_2_.func_177972_a(p_179222_3_);
}
- return p_179222_1_.func_190527_a(this.field_150939_a, p_179222_2_, false, p_179222_3_, (Entity)null);
+ return p_179222_1_.func_190527_a(this.field_150939_a, p_179222_2_, false, p_179222_3_, p_179222_4_);
}
public String func_77667_c(ItemStack p_77667_1_)
@@ -171,6 +159,36 @@
public Block func_179223_d()
@@ -1,8 +1,11 @@
--- ../src-base/minecraft/net/minecraft/item/ItemBlockSpecial.java
+++ ../src-work/minecraft/net/minecraft/item/ItemBlockSpecial.java
@@ -43,7 +43,7 @@
@@ -41,9 +41,9 @@
if (!itemstack.func_190926_b() && p_180614_1_.func_175151_a(p_180614_3_, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(this.field_150935_a, p_180614_3_, false, p_180614_5_, (Entity)null))
ItemStack itemstack = p_180614_1_.func_184586_b(p_180614_4_);
- if (!itemstack.func_190926_b() && p_180614_1_.func_175151_a(p_180614_3_, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(this.field_150935_a, p_180614_3_, false, p_180614_5_, (Entity)null))
+ if (!itemstack.func_190926_b() && p_180614_1_.func_175151_a(p_180614_3_, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(this.field_150935_a, p_180614_3_, false, p_180614_5_, p_180614_1_))
{
- IBlockState iblockstate1 = this.field_150935_a.func_180642_a(p_180614_2_, p_180614_3_, p_180614_5_, p_180614_6_, p_180614_7_, p_180614_8_, 0, p_180614_1_);
+ IBlockState iblockstate1 = this.field_150935_a.getStateForPlacement(p_180614_2_, p_180614_3_, p_180614_5_, p_180614_6_, p_180614_7_, p_180614_8_, 0, p_180614_1_, p_180614_4_);
@@ -1,5 +1,14 @@
--- ../src-base/minecraft/net/minecraft/item/ItemBow.java
+++ ../src-work/minecraft/net/minecraft/item/ItemBow.java
@@ -37,7 +37,7 @@
}
else
{
- return p_185085_3_.func_184607_cu().func_77973_b() != Items.field_151031_f ? 0.0F : (float)(p_185085_1_.func_77988_m() - p_185085_3_.func_184605_cv()) / 20.0F;
+ return !(p_185085_3_.func_184607_cu().func_77973_b() instanceof ItemBow) ? 0.0F : (float)(p_185085_1_.func_77988_m() - p_185085_3_.func_184605_cv()) / 20.0F;
}
}
});
@@ -90,6 +90,10 @@
boolean flag = entityplayer.field_71075_bZ.field_75098_d || EnchantmentHelper.func_77506_a(Enchantments.field_185312_x, p_77615_1_) > 0;
ItemStack itemstack = this.func_185060_a(entityplayer);
@@ -11,7 +20,7 @@
if (!itemstack.func_190926_b() || flag)
{
if (itemstack.func_190926_b())
@@ -97,12 +101,11 @@
@@ -97,17 +101,17 @@
itemstack = new ItemStack(Items.field_151032_g);
}
@@ -25,7 +34,13 @@
if (!p_77615_2_.field_72995_K)
{
@@ -190,6 +193,9 @@
ItemArrow itemarrow = (ItemArrow)(itemstack.func_77973_b() instanceof ItemArrow ? itemstack.func_77973_b() : Items.field_151032_g);
EntityArrow entityarrow = itemarrow.func_185052_a(p_77615_2_, itemstack, entityplayer);
+ entityarrow = this.customizeArrow(entityarrow);
entityarrow.func_184547_a(entityplayer, entityplayer.field_70125_A, entityplayer.field_70177_z, 0.0F, f * 3.0F, 1.0F);
if (f == 1.0F)
@@ -190,6 +194,9 @@
ItemStack itemstack = p_77659_2_.func_184586_b(p_77659_3_);
boolean flag = !this.func_185060_a(p_77659_2_).func_190926_b();
@@ -35,3 +50,13 @@
if (!p_77659_2_.field_71075_bZ.field_75098_d && !flag)
{
return flag ? new ActionResult(EnumActionResult.PASS, itemstack) : new ActionResult(EnumActionResult.FAIL, itemstack);
@@ -205,4 +212,9 @@
{
return 1;
}
+
+ public EntityArrow customizeArrow(EntityArrow arrow)
+ {
+ return arrow;
+ }
}
@@ -0,0 +1,10 @@
--- ../src-base/minecraft/net/minecraft/item/ItemMonsterPlacer.java
+++ ../src-work/minecraft/net/minecraft/item/ItemMonsterPlacer.java
@@ -234,6 +234,7 @@
entity.func_70012_b(p_77840_2_, p_77840_4_, p_77840_6_, MathHelper.func_76142_g(p_77840_0_.field_73012_v.nextFloat() * 360.0F), 0.0F);
entityliving.field_70759_as = entityliving.field_70177_z;
entityliving.field_70761_aq = entityliving.field_70177_z;
+ if (net.minecraftforge.event.ForgeEventFactory.doSpecialSpawn(entityliving, p_77840_0_, (float) p_77840_2_, (float) p_77840_4_, (float) p_77840_6_, null)) return null;
entityliving.func_180482_a(p_77840_0_.func_175649_E(new BlockPos(entityliving)), (IEntityLivingData)null);
p_77840_0_.func_72838_d(entity);
entityliving.func_70642_aH();
@@ -0,0 +1,11 @@
--- ../src-base/minecraft/net/minecraft/item/ItemRedstone.java
+++ ../src-work/minecraft/net/minecraft/item/ItemRedstone.java
@@ -25,7 +25,7 @@
BlockPos blockpos = flag ? p_180614_3_ : p_180614_3_.func_177972_a(p_180614_5_);
ItemStack itemstack = p_180614_1_.func_184586_b(p_180614_4_);
- if (p_180614_1_.func_175151_a(blockpos, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(p_180614_2_.func_180495_p(blockpos).func_177230_c(), blockpos, false, p_180614_5_, (Entity)null) && Blocks.field_150488_af.func_176196_c(p_180614_2_, blockpos))
+ if (p_180614_1_.func_175151_a(blockpos, p_180614_5_, itemstack) && p_180614_2_.func_190527_a(p_180614_2_.func_180495_p(blockpos).func_177230_c(), blockpos, false, p_180614_5_, p_180614_1_) && Blocks.field_150488_af.func_176196_c(p_180614_2_, blockpos))
{
p_180614_2_.func_175656_a(blockpos, Blocks.field_150488_af.func_176223_P());
@@ -223,7 +223,15 @@
return list;
}
@@ -987,7 +1012,7 @@
@@ -871,6 +896,7 @@
return this.func_77973_b().func_77636_d(this);
}
+ @Deprecated // use Forge version on item
public EnumRarity func_77953_t()
{
return this.func_77973_b().func_77613_e(this);
@@ -987,7 +1013,7 @@
}
else
{
@@ -232,7 +240,16 @@
}
return multimap;
@@ -1130,4 +1155,128 @@
@@ -1032,7 +1058,7 @@
{
NBTTagCompound nbttagcompound = this.func_77955_b(new NBTTagCompound());
itextcomponent.func_150256_b().func_150209_a(new HoverEvent(HoverEvent.Action.SHOW_ITEM, new TextComponentString(nbttagcompound.toString())));
- itextcomponent.func_150256_b().func_150238_a(this.func_77953_t().field_77937_e);
+ itextcomponent.func_150256_b().func_150238_a(this.func_77973_b().getForgeRarity(this).getColor());
}
return itextcomponent;
@@ -1130,4 +1156,128 @@
{
this.func_190917_f(-p_190918_1_);
}
@@ -1,6 +1,14 @@
--- ../src-base/minecraft/net/minecraft/nbt/NBTTagCompound.java
+++ ../src-work/minecraft/net/minecraft/nbt/NBTTagCompound.java
@@ -477,6 +477,7 @@
@@ -82,6 +82,7 @@
public void func_74782_a(String p_74782_1_, NBTBase p_74782_2_)
{
+ if (p_74782_2_ == null) throw new IllegalArgumentException("Invalid null NBT value with key " + p_74782_1_);
this.field_74784_a.put(p_74782_1_, p_74782_2_);
}
@@ -477,6 +478,7 @@
private static byte func_152447_a(DataInput p_152447_0_, NBTSizeTracker p_152447_1_) throws IOException
{
@@ -8,7 +16,7 @@
return p_152447_0_.readByte();
}
@@ -487,6 +488,7 @@
@@ -487,6 +489,7 @@
static NBTBase func_152449_a(byte p_152449_0_, String p_152449_1_, DataInput p_152449_2_, int p_152449_3_, NBTSizeTracker p_152449_4_) throws IOException
{
@@ -1,6 +1,20 @@
--- ../src-base/minecraft/net/minecraft/network/NetHandlerPlayServer.java
+++ ../src-work/minecraft/net/minecraft/network/NetHandlerPlayServer.java
@@ -671,7 +671,10 @@
@@ -377,11 +377,13 @@
}
entity.func_70080_a(d3, d4, d5, f, f1);
+ this.field_147369_b.func_70080_a(d3, d4, d5, this.field_147369_b.field_70177_z, this.field_147369_b.field_70125_A); // Forge - Resync player position on vehicle moving
boolean flag2 = worldserver.func_184144_a(entity, entity.func_174813_aQ().func_186664_h(0.0625D)).isEmpty();
if (flag && (flag1 || !flag2))
{
entity.func_70080_a(d0, d1, d2, f, f1);
+ this.field_147369_b.func_70080_a(d0, d1, d2, this.field_147369_b.field_70177_z, this.field_147369_b.field_70125_A); // Forge - Resync player position on vehicle moving
this.field_147371_a.func_179290_a(new SPacketMoveVehicle(entity));
return;
}
@@ -671,7 +673,10 @@
double d2 = this.field_147369_b.field_70161_v - ((double)blockpos.func_177952_p() + 0.5D);
double d3 = d0 * d0 + d1 * d1 + d2 * d2;
@@ -12,7 +26,7 @@
{
return;
}
@@ -729,7 +732,9 @@
@@ -729,7 +734,9 @@
if (blockpos.func_177956_o() < this.field_147367_d.func_71207_Z() - 1 || enumfacing != EnumFacing.UP && blockpos.func_177956_o() < this.field_147367_d.func_71207_Z())
{
@@ -23,7 +37,31 @@
{
this.field_147369_b.field_71134_c.func_187251_a(this.field_147369_b, worldserver, itemstack, enumhand, blockpos, enumfacing, p_184337_1_.func_187026_d(), p_184337_1_.func_187025_e(), p_184337_1_.func_187020_f());
}
@@ -933,7 +938,9 @@
@@ -789,12 +796,13 @@
{
this.field_147369_b.func_70634_a(entity.field_70165_t, entity.field_70163_u, entity.field_70161_v);
}
- else
+ else if (net.minecraftforge.common.ForgeHooks.onTravelToDimension(this.field_147369_b, entity.field_71093_bK))
{
+ int prevDimension = this.field_147369_b.field_71093_bK;
WorldServer worldserver1 = this.field_147369_b.func_71121_q();
WorldServer worldserver2 = (WorldServer)entity.field_70170_p;
this.field_147369_b.field_71093_bK = entity.field_71093_bK;
- this.func_147359_a(new SPacketRespawn(this.field_147369_b.field_71093_bK, worldserver1.func_175659_aa(), worldserver1.func_72912_H().func_76067_t(), this.field_147369_b.field_71134_c.func_73081_b()));
+ this.func_147359_a(new SPacketRespawn(this.field_147369_b.field_71093_bK, worldserver2.func_175659_aa(), worldserver2.func_72912_H().func_76067_t(), this.field_147369_b.field_71134_c.func_73081_b())); // Forge: Use new dimensions information
this.field_147367_d.func_184103_al().func_187243_f(this.field_147369_b);
worldserver1.func_72973_f(this.field_147369_b);
this.field_147369_b.field_70128_L = false;
@@ -813,6 +821,7 @@
this.field_147369_b.field_71134_c.func_73080_a(worldserver2);
this.field_147367_d.func_184103_al().func_72354_b(this.field_147369_b, worldserver2);
this.field_147367_d.func_184103_al().func_72385_f(this.field_147369_b);
+ net.minecraftforge.fml.common.FMLCommonHandler.instance().firePlayerChangedDimensionEvent(this.field_147369_b, prevDimension, this.field_147369_b.field_71093_bK);
}
}
}
@@ -933,7 +942,9 @@
}
else
{
@@ -34,7 +72,7 @@
this.field_147367_d.func_184103_al().func_148544_a(itextcomponent, false);
}
@@ -1066,6 +1073,7 @@
@@ -1066,6 +1077,7 @@
else if (p_147340_1_.func_149565_c() == CPacketUseEntity.Action.INTERACT_AT)
{
EnumHand enumhand1 = p_147340_1_.func_186994_b();
@@ -42,7 +80,7 @@
entity.func_184199_a(this.field_147369_b, p_147340_1_.func_179712_b(), enumhand1);
}
else if (p_147340_1_.func_149565_c() == CPacketUseEntity.Action.ATTACK)
@@ -1106,7 +1114,7 @@
@@ -1106,7 +1118,7 @@
return;
}
@@ -51,7 +89,7 @@
if (this.field_147367_d.func_71199_h())
{
@@ -1149,7 +1157,7 @@
@@ -1149,7 +1161,7 @@
{
ItemStack itemstack2 = this.field_147369_b.field_71070_bA.func_184996_a(p_147351_1_.func_149544_d(), p_147351_1_.func_149543_e(), p_147351_1_.func_186993_f(), this.field_147369_b);
@@ -0,0 +1,27 @@
--- ../src-base/minecraft/net/minecraft/network/datasync/DataSerializers.java
+++ ../src-work/minecraft/net/minecraft/network/datasync/DataSerializers.java
@@ -305,20 +305,21 @@
}
};
+ @Deprecated // Forge: ONLY FOR VANILLA - mods should use the Forge registry
public static void func_187189_a(DataSerializer<?> p_187189_0_)
{
- field_187204_n.func_186808_c(p_187189_0_);
+ if (field_187204_n.func_186808_c(p_187189_0_) >= 256) throw new RuntimeException("Vanilla DataSerializer ID limit exceeded");
}
@Nullable
public static DataSerializer<?> func_187190_a(int p_187190_0_)
{
- return (DataSerializer)field_187204_n.func_186813_a(p_187190_0_);
+ return net.minecraftforge.common.ForgeHooks.getSerializer(p_187190_0_, field_187204_n);
}
public static int func_187188_b(DataSerializer<?> p_187188_0_)
{
- return field_187204_n.func_186815_a(p_187188_0_);
+ return net.minecraftforge.common.ForgeHooks.getSerializerId(p_187188_0_, field_187204_n);
}
static
@@ -0,0 +1,22 @@
--- ../src-base/minecraft/net/minecraft/network/datasync/EntityDataManager.java
+++ ../src-work/minecraft/net/minecraft/network/datasync/EntityDataManager.java
@@ -38,7 +38,7 @@
public static <T> DataParameter<T> func_187226_a(Class <? extends Entity > p_187226_0_, DataSerializer<T> p_187226_1_)
{
- if (field_190303_a.isDebugEnabled())
+ if (true || field_190303_a.isDebugEnabled()) //Forge: This is very useful for mods that register keys on classes that are not their own
{
try
{
@@ -46,7 +46,9 @@
if (!oclass.equals(p_187226_0_))
{
- field_190303_a.debug("defineId called for: {} from {}", p_187226_0_, oclass, new RuntimeException());
+ //Forge: log at warn, mods should not add to classes that they don't own, and only add stacktrace when in debug is enabled as it is mostly not needed and consumes time
+ if (field_190303_a.isDebugEnabled()) field_190303_a.warn("defineId called for: {} from {}", p_187226_0_, oclass, new RuntimeException());
+ else field_190303_a.warn("defineId called for: {} from {}", p_187226_0_, oclass);
}
}
catch (ClassNotFoundException var5)
@@ -0,0 +1,20 @@
--- ../src-base/minecraft/net/minecraft/pathfinding/FlyingNodeProcessor.java
+++ ../src-work/minecraft/net/minecraft/pathfinding/FlyingNodeProcessor.java
@@ -272,7 +272,9 @@
EnumSet<PathNodeType> enumset = EnumSet.<PathNodeType>noneOf(PathNodeType.class);
PathNodeType pathnodetype = PathNodeType.BLOCKED;
BlockPos blockpos = new BlockPos(p_186319_5_);
+ this.currentEntity = p_186319_5_;
pathnodetype = this.func_193577_a(p_186319_1_, p_186319_2_, p_186319_3_, p_186319_4_, p_186319_6_, p_186319_7_, p_186319_8_, p_186319_9_, p_186319_10_, enumset, pathnodetype, blockpos);
+ this.currentEntity = null;
if (enumset.contains(PathNodeType.FENCE))
{
@@ -321,6 +323,7 @@
{
pathnodetype = PathNodeType.DAMAGE_CACTUS;
}
+ else if (pathnodetype1 == PathNodeType.DAMAGE_OTHER) pathnodetype = PathNodeType.DAMAGE_OTHER;
else
{
pathnodetype = pathnodetype1 != PathNodeType.WALKABLE && pathnodetype1 != PathNodeType.OPEN && pathnodetype1 != PathNodeType.WATER ? PathNodeType.WALKABLE : PathNodeType.OPEN;
@@ -1,18 +1,60 @@
--- ../src-base/minecraft/net/minecraft/pathfinding/WalkNodeProcessor.java
+++ ../src-work/minecraft/net/minecraft/pathfinding/WalkNodeProcessor.java
@@ -427,6 +427,7 @@
@@ -23,6 +23,7 @@
public class WalkNodeProcessor extends NodeProcessor
{
protected float field_176183_h;
+ protected EntityLiving currentEntity;
public void func_186315_a(IBlockAccess p_186315_1_, EntityLiving p_186315_2_)
{
@@ -295,7 +296,9 @@
PathNodeType pathnodetype = PathNodeType.BLOCKED;
double d0 = (double)p_186319_5_.field_70130_N / 2.0D;
BlockPos blockpos = new BlockPos(p_186319_5_);
+ this.currentEntity = p_186319_5_;
pathnodetype = this.func_193577_a(p_186319_1_, p_186319_2_, p_186319_3_, p_186319_4_, p_186319_6_, p_186319_7_, p_186319_8_, p_186319_9_, p_186319_10_, enumset, pathnodetype, blockpos);
+ this.currentEntity = null;
if (enumset.contains(PathNodeType.FENCE))
{
@@ -399,6 +402,8 @@
{
pathnodetype = PathNodeType.DAMAGE_CACTUS;
}
+
+ if (pathnodetype1 == PathNodeType.DAMAGE_OTHER) pathnodetype = PathNodeType.DAMAGE_OTHER;
}
pathnodetype = this.func_193578_a(p_186330_1_, p_186330_2_, p_186330_3_, p_186330_4_, pathnodetype);
@@ -417,16 +422,19 @@
{
if (i != 0 || j != 0)
{
- Block block = p_193578_1_.func_180495_p(blockpos$pooledmutableblockpos.func_181079_c(i + p_193578_2_, p_193578_3_, j + p_193578_4_)).func_177230_c();
+ IBlockState state = p_193578_1_.func_180495_p(blockpos$pooledmutableblockpos.func_181079_c(i + p_193578_2_, p_193578_3_, j + p_193578_4_));
+ Block block = state.func_177230_c();
+ PathNodeType type = block.getAiPathNodeType(state, p_193578_1_, blockpos$pooledmutableblockpos, this.currentEntity);
- if (block == Blocks.field_150434_aF)
+ if (block == Blocks.field_150434_aF || type == PathNodeType.DAMAGE_CACTUS)
{
p_193578_5_ = PathNodeType.DANGER_CACTUS;
}
- else if (block == Blocks.field_150480_ab)
+ else if (block == Blocks.field_150480_ab || type == PathNodeType.DAMAGE_FIRE)
{
p_193578_5_ = PathNodeType.DANGER_FIRE;
}
+ else if(block.isBurning(p_193578_1_,blockpos$pooledmutableblockpos)) p_193578_5_ = PathNodeType.DAMAGE_FIRE;
+ else if (type == PathNodeType.DAMAGE_OTHER) p_193578_5_ = PathNodeType.DANGER_OTHER;
}
}
}
@@ -443,6 +444,9 @@
@@ -443,6 +451,9 @@
Block block = iblockstate.func_177230_c();
Material material = iblockstate.func_185904_a();
+ PathNodeType type = block.getAiPathNodeType(iblockstate, p_189553_1_, blockpos);
+ PathNodeType type = block.getAiPathNodeType(iblockstate, p_189553_1_, blockpos, this.currentEntity);
+ if (type != null) return type;
+
if (material == Material.field_151579_a)
@@ -20,7 +20,7 @@
public boolean func_76398_f()
{
return this.field_76418_K;
@@ -293,7 +292,85 @@
@@ -293,7 +292,122 @@
return p_111183_2_.func_111164_d() * (double)(p_111183_1_ + 1);
}
@@ -60,11 +60,29 @@
+ * @param y the y coordinate
+ * @param effect the active PotionEffect
+ * @param mc the Minecraft instance, for convenience
+ * @deprecated use {@link #renderInventoryEffect(PotionEffect, net.minecraft.client.gui.Gui, int, int, float)}
+ */
@SideOnly(Side.CLIENT)
+ @Deprecated // TODO: remove
+ public void renderInventoryEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc) { }
+
+ /**
+ * Called to draw the this Potion onto the player's inventory when it's active.
+ * This can be used to e.g. render Potion icons from your own texture.
+ *
+ * @param effect the active PotionEffect
+ * @param gui the gui instance
+ * @param x the x coordinate
+ * @param y the y coordinate
+ * @param z the z level
+ */
+ @SideOnly(Side.CLIENT)
+ public void renderInventoryEffect(PotionEffect effect, net.minecraft.client.gui.Gui gui, int x, int y, float z)
+ {
+ renderInventoryEffect(x, y, effect, net.minecraft.client.Minecraft.func_71410_x());
+ }
+
+ /**
+ * Called to draw the this Potion onto the player's ingame HUD when it's active.
+ * This can be used to e.g. render Potion icons from your own texture.
+ * @param x the x coordinate
@@ -72,11 +90,30 @@
+ * @param effect the active PotionEffect
+ * @param mc the Minecraft instance, for convenience
+ * @param alpha the alpha value, blinks when the potion is about to run out
+ * @deprecated use {@link #renderHUDEffect(PotionEffect, net.minecraft.client.gui.Gui, int, int, float, float)}
+ */
+ @SideOnly(Side.CLIENT)
+ @Deprecated // TODO: remove
+ public void renderHUDEffect(int x, int y, PotionEffect effect, net.minecraft.client.Minecraft mc, float alpha) { }
+
+ /**
+ * Called to draw the this Potion onto the player's ingame HUD when it's active.
+ * This can be used to e.g. render Potion icons from your own texture.
+ *
+ * @param effect the active PotionEffect
+ * @param gui the gui instance
+ * @param x the x coordinate
+ * @param y the y coordinate
+ * @param z the z level
+ * @param alpha the alpha value, blinks when the potion is about to run out
+ */
+ @SideOnly(Side.CLIENT)
+ public void renderHUDEffect(PotionEffect effect, net.minecraft.client.gui.Gui gui, int x, int y, float z, float alpha)
+ {
+ renderHUDEffect(x, y, effect, net.minecraft.client.Minecraft.func_71410_x(), alpha);
+ }
+
+ /**
+ * Get a fresh list of items that can cure this Potion.
+ * All new PotionEffects created from this Potion will call this to initialize the default curative items
+ * @see PotionEffect#getCurativeItems
@@ -17,7 +17,19 @@
}
public void func_76452_a(PotionEffect p_76452_1_)
@@ -195,12 +198,13 @@
@@ -79,6 +82,11 @@
public Potion func_188419_a()
{
+ return this.getPotionRaw() == null ? null : this.getPotionRaw().delegate.get();
+ }
+
+ private Potion getPotionRaw()
+ {
return this.field_188420_b;
}
@@ -195,12 +203,13 @@
p_82719_1_.func_74768_a("Duration", this.func_76459_b());
p_82719_1_.func_74757_a("Ambient", this.func_82720_e());
p_82719_1_.func_74757_a("ShowParticles", this.func_188418_e());
@@ -32,7 +44,7 @@
Potion potion = Potion.func_188412_a(i);
if (potion == null)
@@ -219,7 +223,7 @@
@@ -219,7 +228,7 @@
flag1 = p_82722_0_.func_74767_n("ShowParticles");
}
@@ -41,7 +53,7 @@
}
}
@@ -232,7 +236,7 @@
@@ -232,7 +241,7 @@
public int compareTo(PotionEffect p_compareTo_1_)
{
int i = 32147;
@@ -50,7 +62,7 @@
}
@SideOnly(Side.CLIENT)
@@ -240,4 +244,85 @@
@@ -240,4 +249,85 @@
{
return this.field_100013_f;
}
@@ -0,0 +1,67 @@
--- ../src-base/minecraft/net/minecraft/potion/PotionHelper.java
+++ ../src-work/minecraft/net/minecraft/potion/PotionHelper.java
@@ -88,7 +88,7 @@
{
PotionHelper.MixPredicate<Item> mixpredicate = (PotionHelper.MixPredicate)field_185214_b.get(i);
- if (mixpredicate.field_185198_a == item && mixpredicate.field_185199_b.apply(p_185206_1_))
+ if (mixpredicate.field_185198_a.get() == item && mixpredicate.field_185199_b.apply(p_185206_1_))
{
return true;
}
@@ -106,7 +106,7 @@
{
PotionHelper.MixPredicate<PotionType> mixpredicate = (PotionHelper.MixPredicate)field_185213_a.get(i);
- if (mixpredicate.field_185198_a == potiontype && mixpredicate.field_185199_b.apply(p_185209_1_))
+ if (mixpredicate.field_185198_a.get() == potiontype && mixpredicate.field_185199_b.apply(p_185209_1_))
{
return true;
}
@@ -127,9 +127,9 @@
{
PotionHelper.MixPredicate<Item> mixpredicate = (PotionHelper.MixPredicate)field_185214_b.get(i);
- if (mixpredicate.field_185198_a == item && mixpredicate.field_185199_b.apply(p_185212_0_))
+ if (mixpredicate.field_185198_a.get() == item && mixpredicate.field_185199_b.apply(p_185212_0_))
{
- return PotionUtils.func_185188_a(new ItemStack((Item)mixpredicate.field_185200_c), potiontype);
+ return PotionUtils.func_185188_a(new ItemStack((Item)mixpredicate.field_185200_c.get()), potiontype);
}
}
@@ -139,9 +139,9 @@
{
PotionHelper.MixPredicate<PotionType> mixpredicate1 = (PotionHelper.MixPredicate)field_185213_a.get(i);
- if (mixpredicate1.field_185198_a == potiontype && mixpredicate1.field_185199_b.apply(p_185212_0_))
+ if (mixpredicate1.field_185198_a.get() == potiontype && mixpredicate1.field_185199_b.apply(p_185212_0_))
{
- return PotionUtils.func_185188_a(new ItemStack(item), (PotionType)mixpredicate1.field_185200_c);
+ return PotionUtils.func_185188_a(new ItemStack(item), (PotionType)mixpredicate1.field_185200_c.get());
}
}
}
@@ -227,17 +227,17 @@
field_185213_a.add(new PotionHelper.MixPredicate(p_193356_0_, p_193356_1_, p_193356_2_));
}
- static class MixPredicate<T>
+ static class MixPredicate<T extends net.minecraftforge.registries.IForgeRegistryEntry.Impl<T>>
{
- final T field_185198_a;
+ final net.minecraftforge.registries.IRegistryDelegate<T> field_185198_a;
final Ingredient field_185199_b;
- final T field_185200_c;
+ final net.minecraftforge.registries.IRegistryDelegate<T> field_185200_c;
public MixPredicate(T p_i47570_1_, Ingredient p_i47570_2_, T p_i47570_3_)
{
- this.field_185198_a = p_i47570_1_;
+ this.field_185198_a = p_i47570_1_.delegate;
this.field_185199_b = p_i47570_2_;
- this.field_185200_c = p_i47570_3_;
+ this.field_185200_c = p_i47570_3_.delegate;
}
}
}
@@ -167,7 +167,7 @@
p_187242_1_.field_71093_bK = p_187242_2_;
WorldServer worldserver1 = this.field_72400_f.func_71218_a(p_187242_1_.field_71093_bK);
- p_187242_1_.field_71135_a.func_147359_a(new SPacketRespawn(p_187242_1_.field_71093_bK, p_187242_1_.field_70170_p.func_175659_aa(), p_187242_1_.field_70170_p.func_72912_H().func_76067_t(), p_187242_1_.field_71134_c.func_73081_b()));
+ p_187242_1_.field_71135_a.func_147359_a(new SPacketRespawn(p_187242_1_.field_71093_bK, worldserver1.func_175659_aa(), worldserver1.func_72912_H().func_76067_t(), p_187242_1_.field_71134_c.func_73081_b()));
+ p_187242_1_.field_71135_a.func_147359_a(new SPacketRespawn(p_187242_1_.field_71093_bK, worldserver1.func_175659_aa(), worldserver1.func_72912_H().func_76067_t(), p_187242_1_.field_71134_c.func_73081_b())); // Forge: Use new dimensions information
this.func_187243_f(p_187242_1_);
worldserver.func_72973_f(p_187242_1_);
p_187242_1_.field_70128_L = false;
@@ -1,13 +1,21 @@
--- ../src-base/minecraft/net/minecraft/util/text/translation/LanguageMap.java
+++ ../src-work/minecraft/net/minecraft/util/text/translation/LanguageMap.java
@@ -23,9 +23,29 @@
@@ -23,10 +23,37 @@
public LanguageMap()
{
+ InputStream inputstream = LanguageMap.class.getResourceAsStream("/assets/minecraft/lang/en_us.lang");
+ inject(this, inputstream);
try
{
- InputStream inputstream = LanguageMap.class.getResourceAsStream("/assets/minecraft/lang/en_us.lang");
+ inject(this, inputstream);
+ }
+ finally
+ {
+ IOUtils.closeQuietly(inputstream); // Forge: close stream after use (MC-153470)
+ }
+ }
+
+ public static void inject(InputStream inputstream)
+ {
+ inject(field_74817_a, inputstream);
@@ -23,15 +31,15 @@
+ public static Map<String, String> parseLangFile(InputStream inputstream)
+ {
+ Map<String, String> table = Maps.newHashMap();
try
{
- InputStream inputstream = LanguageMap.class.getResourceAsStream("/assets/minecraft/lang/en_us.lang");
+ try
+ {
+ inputstream = net.minecraftforge.fml.common.FMLCommonHandler.instance().loadLanguage(table, inputstream);
+ if (inputstream == null) return table;
+
for (String s : IOUtils.readLines(inputstream, StandardCharsets.UTF_8))
{
@@ -37,17 +57,18 @@
if (!s.isEmpty() && s.charAt(0) != '#')
@@ -37,17 +64,18 @@
{
String s1 = astring[0];
String s2 = field_111053_a.matcher(astring[1]).replaceAll("%$1s");
@@ -0,0 +1,10 @@
--- ../src-base/minecraft/net/minecraft/village/VillageSiege.java
+++ ../src-work/minecraft/net/minecraft/village/VillageSiege.java
@@ -146,6 +146,7 @@
if (vec3d != null)
{
+ if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.village.VillageSiegeEvent(this, field_75537_a, entityplayer, field_75531_f, vec3d))) return false;
break;
}
}
@@ -1,6 +1,14 @@
--- ../src-base/minecraft/net/minecraft/world/World.java
+++ ../src-work/minecraft/net/minecraft/world/World.java
@@ -63,8 +63,15 @@
@@ -11,6 +11,7 @@
import java.util.Random;
import java.util.UUID;
import java.util.function.Supplier;
+
import javax.annotation.Nullable;
import net.minecraft.advancements.AdvancementManager;
import net.minecraft.advancements.FunctionManager;
@@ -63,8 +64,15 @@
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -17,7 +25,7 @@
private int field_181546_a = 63;
protected boolean field_72999_e;
public final List<Entity> field_72996_f = Lists.<Entity>newArrayList();
@@ -108,6 +115,12 @@
@@ -108,6 +116,12 @@
private final WorldBorder field_175728_M;
int[] field_72994_J;
@@ -30,7 +38,7 @@
protected World(ISaveHandler p_i45749_1_, WorldInfo p_i45749_2_, WorldProvider p_i45749_3_, Profiler p_i45749_4_, boolean p_i45749_5_)
{
this.field_73021_x = Lists.newArrayList(this.field_184152_t);
@@ -122,6 +135,7 @@
@@ -122,6 +136,7 @@
this.field_73011_w = p_i45749_3_;
this.field_72995_K = p_i45749_5_;
this.field_175728_M = p_i45749_3_.func_177501_r();
@@ -38,7 +46,7 @@
}
public World func_175643_b()
@@ -131,6 +145,11 @@
@@ -131,6 +146,11 @@
public Biome func_180494_b(final BlockPos p_180494_1_)
{
@@ -50,7 +58,7 @@
if (this.func_175667_e(p_180494_1_))
{
Chunk chunk = this.func_175726_f(p_180494_1_);
@@ -207,7 +226,7 @@
@@ -207,7 +227,7 @@
public boolean func_175623_d(BlockPos p_175623_1_)
{
@@ -59,7 +67,7 @@
}
public boolean func_175667_e(BlockPos p_175667_1_)
@@ -308,24 +327,51 @@
@@ -308,24 +328,51 @@
else
{
Chunk chunk = this.func_175726_f(p_180501_1_);
@@ -114,7 +122,7 @@
this.func_184138_a(p_180501_1_, iblockstate, p_180501_2_, p_180501_3_);
}
@@ -342,8 +388,6 @@
@@ -342,8 +389,6 @@
{
this.func_190522_c(p_180501_1_, block);
}
@@ -123,7 +131,7 @@
}
}
}
@@ -358,7 +402,7 @@
@@ -358,7 +403,7 @@
IBlockState iblockstate = this.func_180495_p(p_175655_1_);
Block block = iblockstate.func_177230_c();
@@ -132,7 +140,7 @@
{
return false;
}
@@ -441,6 +485,9 @@
@@ -441,6 +486,9 @@
public void func_175685_c(BlockPos p_175685_1_, Block p_175685_2_, boolean p_175685_3_)
{
@@ -142,7 +150,7 @@
this.func_190524_a(p_175685_1_.func_177976_e(), p_175685_2_, p_175685_1_);
this.func_190524_a(p_175685_1_.func_177974_f(), p_175685_2_, p_175685_1_);
this.func_190524_a(p_175685_1_.func_177977_b(), p_175685_2_, p_175685_1_);
@@ -456,6 +503,11 @@
@@ -456,6 +504,11 @@
public void func_175695_a(BlockPos p_175695_1_, Block p_175695_2_, EnumFacing p_175695_3_)
{
@@ -154,7 +162,7 @@
if (p_175695_3_ != EnumFacing.WEST)
{
this.func_190524_a(p_175695_1_.func_177976_e(), p_175695_2_, p_175695_1_);
@@ -507,7 +559,7 @@
@@ -507,7 +560,7 @@
{
try
{
@@ -163,7 +171,7 @@
}
catch (Throwable var2)
{
@@ -527,11 +579,11 @@
@@ -527,11 +580,11 @@
{
IBlockState iblockstate = this.func_180495_p(p_190529_1_);
@@ -177,7 +185,7 @@
}
catch (Throwable throwable)
{
@@ -543,7 +595,7 @@
@@ -543,7 +596,7 @@
{
try
{
@@ -186,7 +194,7 @@
}
catch (Throwable var2)
{
@@ -588,7 +640,7 @@
@@ -588,7 +641,7 @@
{
IBlockState iblockstate = this.func_180495_p(blockpos1);
@@ -195,7 +203,7 @@
{
return false;
}
@@ -862,7 +914,7 @@
@@ -862,7 +915,7 @@
public boolean func_72935_r()
{
@@ -204,7 +212,7 @@
}
@Nullable
@@ -1065,6 +1117,13 @@
@@ -1065,6 +1118,13 @@
public void func_184148_a(@Nullable EntityPlayer p_184148_1_, double p_184148_2_, double p_184148_4_, double p_184148_6_, SoundEvent p_184148_8_, SoundCategory p_184148_9_, float p_184148_10_, float p_184148_11_)
{
@@ -218,7 +226,16 @@
for (int i = 0; i < this.field_73021_x.size(); ++i)
{
((IWorldEventListener)this.field_73021_x.get(i)).func_184375_a(p_184148_1_, p_184148_8_, p_184148_9_, p_184148_2_, p_184148_4_, p_184148_6_, p_184148_10_, p_184148_11_);
@@ -1118,6 +1177,9 @@
@@ -1112,12 +1172,18 @@
public boolean func_72942_c(Entity p_72942_1_)
{
+ if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.EntityJoinWorldEvent(p_72942_1_, this)))
+ return false;
+
this.field_73007_j.add(p_72942_1_);
return true;
}
public boolean func_72838_d(Entity p_72838_1_)
{
@@ -228,7 +245,7 @@
int i = MathHelper.func_76128_c(p_72838_1_.field_70165_t / 16.0D);
int j = MathHelper.func_76128_c(p_72838_1_.field_70161_v / 16.0D);
boolean flag = p_72838_1_.field_98038_p;
@@ -1140,6 +1202,8 @@
@@ -1140,6 +1206,8 @@
this.func_72854_c();
}
@@ -237,7 +254,23 @@
this.func_72964_e(i, j).func_76612_a(p_72838_1_);
this.field_72996_f.add(p_72838_1_);
this.func_72923_a(p_72838_1_);
@@ -1227,6 +1291,7 @@
@@ -1153,6 +1221,7 @@
{
((IWorldEventListener)this.field_73021_x.get(i)).func_72703_a(p_72923_1_);
}
+ p_72923_1_.onAddedToWorld();
}
public void func_72847_b(Entity p_72847_1_)
@@ -1161,6 +1230,7 @@
{
((IWorldEventListener)this.field_73021_x.get(i)).func_72709_b(p_72847_1_);
}
+ p_72847_1_.onRemovedFromWorld();
}
public void func_72900_e(Entity p_72900_1_)
@@ -1227,6 +1297,7 @@
IBlockState iblockstate = Blocks.field_150348_b.func_176223_P();
BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.func_185346_s();
@@ -245,7 +278,7 @@
try
{
for (int k1 = i; k1 < j; ++k1)
@@ -1269,7 +1334,7 @@
@@ -1269,7 +1340,7 @@
iblockstate1.func_185908_a(this, blockpos$pooledmutableblockpos, p_191504_2_, p_191504_4_, p_191504_1_, false);
@@ -254,7 +287,7 @@
{
boolean flag5 = true;
return flag5;
@@ -1319,11 +1384,10 @@
@@ -1319,11 +1390,10 @@
}
}
}
@@ -267,7 +300,7 @@
public void func_72848_b(IWorldEventListener p_72848_1_)
{
this.field_73021_x.remove(p_72848_1_);
@@ -1361,19 +1425,38 @@
@@ -1361,19 +1431,38 @@
public int func_72967_a(float p_72967_1_)
{
@@ -308,7 +341,7 @@
float f = this.func_72826_c(p_72971_1_);
float f1 = 1.0F - (MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.2F);
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1386,6 +1469,12 @@
@@ -1386,6 +1475,12 @@
@SideOnly(Side.CLIENT)
public Vec3d func_72833_a(Entity p_72833_1_, float p_72833_2_)
{
@@ -321,7 +354,7 @@
float f = this.func_72826_c(p_72833_2_);
float f1 = MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1393,9 +1482,7 @@
@@ -1393,9 +1488,7 @@
int j = MathHelper.func_76128_c(p_72833_1_.field_70163_u);
int k = MathHelper.func_76128_c(p_72833_1_.field_70161_v);
BlockPos blockpos = new BlockPos(i, j, k);
@@ -332,7 +365,7 @@
float f3 = (float)(l >> 16 & 255) / 255.0F;
float f4 = (float)(l >> 8 & 255) / 255.0F;
float f5 = (float)(l & 255) / 255.0F;
@@ -1444,20 +1531,25 @@
@@ -1444,20 +1537,25 @@
public float func_72826_c(float p_72826_1_)
{
@@ -361,7 +394,7 @@
public float func_72929_e(float p_72929_1_)
{
float f = this.func_72826_c(p_72929_1_);
@@ -1467,6 +1559,12 @@
@@ -1467,6 +1565,12 @@
@SideOnly(Side.CLIENT)
public Vec3d func_72824_f(float p_72824_1_)
{
@@ -374,7 +407,7 @@
float f = this.func_72826_c(p_72824_1_);
float f1 = MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.5F;
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1522,9 +1620,9 @@
@@ -1522,9 +1626,9 @@
for (blockpos = new BlockPos(p_175672_1_.func_177958_n(), chunk.func_76625_h() + 16, p_175672_1_.func_177952_p()); blockpos.func_177956_o() >= 0; blockpos = blockpos1)
{
blockpos1 = blockpos.func_177977_b();
@@ -386,7 +419,7 @@
{
break;
}
@@ -1536,6 +1634,12 @@
@@ -1536,6 +1640,12 @@
@SideOnly(Side.CLIENT)
public float func_72880_h(float p_72880_1_)
{
@@ -399,7 +432,7 @@
float f = this.func_72826_c(p_72880_1_);
float f1 = 1.0F - (MathHelper.func_76134_b(f * ((float)Math.PI * 2F)) * 2.0F + 0.25F);
f1 = MathHelper.func_76131_a(f1, 0.0F, 1.0F);
@@ -1570,6 +1674,7 @@
@@ -1570,6 +1680,7 @@
try
{
@@ -407,7 +440,7 @@
++entity.field_70173_aa;
entity.func_70071_h_();
}
@@ -1587,6 +1692,12 @@
@@ -1587,6 +1698,12 @@
entity.func_85029_a(crashreportcategory);
}
@@ -420,7 +453,7 @@
throw new ReportedException(crashreport);
}
@@ -1641,13 +1752,21 @@
@@ -1641,13 +1758,21 @@
{
try
{
@@ -442,7 +475,7 @@
throw new ReportedException(crashreport1);
}
}
@@ -1674,14 +1793,23 @@
@@ -1674,14 +1799,23 @@
this.field_72984_F.func_76318_c("blockEntities");
@@ -469,7 +502,7 @@
Iterator<TileEntity> iterator = this.field_175730_i.iterator();
while (iterator.hasNext())
@@ -1692,7 +1820,7 @@
@@ -1692,7 +1826,7 @@
{
BlockPos blockpos = tileentity.func_174877_v();
@@ -478,7 +511,7 @@
{
try
{
@@ -1700,7 +1828,9 @@
@@ -1700,7 +1834,9 @@
{
return String.valueOf((Object)TileEntity.func_190559_a(tileentity.getClass()));
});
@@ -488,7 +521,7 @@
this.field_72984_F.func_76319_b();
}
catch (Throwable throwable)
@@ -1708,6 +1838,13 @@
@@ -1708,6 +1844,13 @@
CrashReport crashreport2 = CrashReport.func_85055_a(throwable, "Ticking block entity");
CrashReportCategory crashreportcategory2 = crashreport2.func_85058_a("Block entity being ticked");
tileentity.func_145828_a(crashreportcategory2);
@@ -502,7 +535,7 @@
throw new ReportedException(crashreport2);
}
}
@@ -1720,7 +1857,10 @@
@@ -1720,7 +1863,10 @@
if (this.func_175667_e(tileentity.func_174877_v()))
{
@@ -514,7 +547,7 @@
}
}
}
@@ -1764,12 +1904,18 @@
@@ -1764,12 +1910,18 @@
public boolean func_175700_a(TileEntity p_175700_1_)
{
@@ -533,7 +566,7 @@
if (this.field_72995_K)
{
@@ -1785,6 +1931,11 @@
@@ -1785,6 +1937,11 @@
{
if (this.field_147481_N)
{
@@ -545,14 +578,14 @@
this.field_147484_a.addAll(p_147448_1_);
}
else
@@ -1807,9 +1958,13 @@
@@ -1807,9 +1964,13 @@
{
int j2 = MathHelper.func_76128_c(p_72866_1_.field_70165_t);
int k2 = MathHelper.func_76128_c(p_72866_1_.field_70161_v);
- int l2 = 32;
- if (p_72866_2_ && !this.func_175663_a(j2 - 32, 0, k2 - 32, j2 + 32, 0, k2 + 32, true))
+ boolean isForced = getPersistentChunks().containsKey(new net.minecraft.util.math.ChunkPos(j2 >> 4, k2 >> 4));
+ boolean isForced = !this.field_72995_K && getPersistentChunks().containsKey(new net.minecraft.util.math.ChunkPos(j2 >> 4, k2 >> 4));
+ int range = isForced ? 0 : 32;
+ boolean canUpdate = !p_72866_2_ || this.func_175663_a(j2 - range, 0, k2 - range, j2 + range, 0, k2 + range, true);
+ if (!canUpdate) canUpdate = net.minecraftforge.event.ForgeEventFactory.canEntityUpdate(p_72866_1_);
@@ -561,7 +594,7 @@
{
return;
}
@@ -1831,6 +1986,7 @@
@@ -1831,6 +1992,7 @@
}
else
{
@@ -569,7 +602,7 @@
p_72866_1_.func_70071_h_();
}
}
@@ -1914,7 +2070,7 @@
@@ -1914,7 +2076,7 @@
{
Entity entity4 = list.get(j2);
@@ -578,7 +611,7 @@
{
return false;
}
@@ -1972,6 +2128,12 @@
@@ -1972,6 +2134,12 @@
{
IBlockState iblockstate1 = this.func_180495_p(blockpos$pooledmutableblockpos.func_181079_c(l3, i4, j4));
@@ -591,7 +624,7 @@
if (iblockstate1.func_185904_a().func_76224_d())
{
blockpos$pooledmutableblockpos.func_185344_t();
@@ -2011,6 +2173,11 @@
@@ -2011,6 +2179,11 @@
blockpos$pooledmutableblockpos.func_185344_t();
return true;
}
@@ -603,7 +636,7 @@
}
}
}
@@ -2050,6 +2217,16 @@
@@ -2050,6 +2223,16 @@
IBlockState iblockstate1 = this.func_180495_p(blockpos$pooledmutableblockpos);
Block block = iblockstate1.func_177230_c();
@@ -620,7 +653,7 @@
if (iblockstate1.func_185904_a() == p_72918_2_)
{
double d0 = (double)((float)(i4 + 1) - BlockLiquid.func_149801_b(((Integer)iblockstate1.func_177229_b(BlockLiquid.field_176367_b)).intValue()));
@@ -2095,7 +2272,14 @@
@@ -2095,7 +2278,14 @@
{
for (int j4 = j3; j4 < k3; ++j4)
{
@@ -636,7 +669,7 @@
{
blockpos$pooledmutableblockpos.func_185344_t();
return true;
@@ -2116,6 +2300,7 @@
@@ -2116,6 +2306,7 @@
public Explosion func_72885_a(@Nullable Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_)
{
Explosion explosion = new Explosion(this, p_72885_1_, p_72885_2_, p_72885_4_, p_72885_6_, p_72885_8_, p_72885_9_, p_72885_10_);
@@ -644,7 +677,7 @@
explosion.func_77278_a();
explosion.func_77279_a(true);
return explosion;
@@ -2238,6 +2423,7 @@
@@ -2238,6 +2429,7 @@
public void func_175690_a(BlockPos p_175690_1_, @Nullable TileEntity p_175690_2_)
{
@@ -652,16 +685,29 @@
if (!this.func_189509_E(p_175690_1_))
{
if (p_175690_2_ != null && !p_175690_2_.func_145837_r())
@@ -2245,6 +2431,8 @@
@@ -2245,7 +2437,10 @@
if (this.field_147481_N)
{
p_175690_2_.func_174878_a(p_175690_1_);
+ if (p_175690_2_.func_145831_w() != this)
+ p_175690_2_.func_145834_a(this); // Forge - set the world early as vanilla doesn't set it until next tick
Iterator<TileEntity> iterator1 = this.field_147484_a.iterator();
+ List<TileEntity> toInvalidate = Lists.newArrayList();
while (iterator1.hasNext())
@@ -2262,7 +2450,8 @@
{
@@ -2253,16 +2448,18 @@
if (tileentity2.func_174877_v().equals(p_175690_1_))
{
- tileentity2.func_145843_s();
+ toInvalidate.add(tileentity2); // Forge - don't call invalidate while iterating
iterator1.remove();
}
}
+ toInvalidate.forEach(TileEntity::func_145843_s);
this.field_147484_a.add(p_175690_2_);
}
else
{
@@ -671,7 +717,7 @@
this.func_175700_a(p_175690_2_);
}
}
@@ -2277,6 +2466,8 @@
@@ -2277,6 +2474,8 @@
{
tileentity2.func_145843_s();
this.field_147484_a.remove(tileentity2);
@@ -680,7 +726,7 @@
}
else
{
@@ -2289,6 +2480,7 @@
@@ -2289,6 +2488,7 @@
this.func_175726_f(p_175713_1_).func_177425_e(p_175713_1_);
}
@@ -688,7 +734,7 @@
}
public void func_147457_a(TileEntity p_147457_1_)
@@ -2315,7 +2507,7 @@
@@ -2315,7 +2515,7 @@
if (chunk1 != null && !chunk1.func_76621_g())
{
IBlockState iblockstate1 = this.func_180495_p(p_175677_1_);
@@ -697,7 +743,7 @@
}
else
{
@@ -2338,6 +2530,7 @@
@@ -2338,6 +2538,7 @@
{
this.field_72985_G = p_72891_1_;
this.field_72992_H = p_72891_2_;
@@ -705,7 +751,7 @@
}
public void func_72835_b()
@@ -2347,6 +2540,11 @@
@@ -2347,6 +2548,11 @@
protected void func_72947_a()
{
@@ -717,7 +763,7 @@
if (this.field_72986_A.func_76059_o())
{
this.field_73004_o = 1.0F;
@@ -2360,6 +2558,11 @@
@@ -2360,6 +2566,11 @@
protected void func_72979_l()
{
@@ -729,7 +775,7 @@
if (this.field_73011_w.func_191066_m())
{
if (!this.field_72995_K)
@@ -2484,6 +2687,11 @@
@@ -2484,6 +2695,11 @@
public boolean func_175670_e(BlockPos p_175670_1_, boolean p_175670_2_)
{
@@ -741,7 +787,7 @@
Biome biome = this.func_180494_b(p_175670_1_);
float f = biome.func_180626_a(p_175670_1_);
@@ -2525,6 +2733,11 @@
@@ -2525,6 +2741,11 @@
public boolean func_175708_f(BlockPos p_175708_1_, boolean p_175708_2_)
{
@@ -753,7 +799,7 @@
Biome biome = this.func_180494_b(p_175708_1_);
float f = biome.func_180626_a(p_175708_1_);
@@ -2542,7 +2755,7 @@
@@ -2542,7 +2763,7 @@
{
IBlockState iblockstate1 = this.func_180495_p(p_175708_1_);
@@ -762,7 +808,7 @@
{
return true;
}
@@ -2574,10 +2787,10 @@
@@ -2574,10 +2795,10 @@
else
{
IBlockState iblockstate1 = this.func_180495_p(p_175638_1_);
@@ -776,7 +822,7 @@
{
k2 = 1;
}
@@ -2589,7 +2802,7 @@
@@ -2589,7 +2810,7 @@
if (k2 >= 15)
{
@@ -785,7 +831,7 @@
}
else if (j2 >= 14)
{
@@ -2630,12 +2843,13 @@
@@ -2630,12 +2851,13 @@
public boolean func_180500_c(EnumSkyBlock p_180500_1_, BlockPos p_180500_2_)
{
@@ -800,7 +846,7 @@
int j2 = 0;
int k2 = 0;
this.field_72984_F.func_76320_a("getBrightness");
@@ -2673,7 +2887,7 @@
@@ -2673,7 +2895,7 @@
int l5 = MathHelper.func_76130_a(k4 - k3);
int i6 = MathHelper.func_76130_a(l4 - l3);
@@ -809,7 +855,7 @@
{
BlockPos.PooledMutableBlockPos blockpos$pooledmutableblockpos = BlockPos.PooledMutableBlockPos.func_185346_s();
@@ -2683,7 +2897,8 @@
@@ -2683,7 +2905,8 @@
int k6 = k4 + enumfacing.func_96559_d();
int l6 = l4 + enumfacing.func_82599_e();
blockpos$pooledmutableblockpos.func_181079_c(j6, k6, l6);
@@ -819,7 +865,7 @@
j5 = this.func_175642_b(p_180500_1_, blockpos$pooledmutableblockpos);
if (j5 == i5 - i7 && k2 < this.field_72994_J.length)
@@ -2725,7 +2940,7 @@
@@ -2725,7 +2948,7 @@
int j9 = Math.abs(i8 - l3);
boolean flag = k2 < this.field_72994_J.length - 6;
@@ -828,7 +874,7 @@
{
if (this.func_175642_b(p_180500_1_, blockpos2.func_177976_e()) < k8)
{
@@ -2791,10 +3006,10 @@
@@ -2791,10 +3014,10 @@
public List<Entity> func_175674_a(@Nullable Entity p_175674_1_, AxisAlignedBB p_175674_2_, @Nullable Predicate <? super Entity > p_175674_3_)
{
List<Entity> list = Lists.<Entity>newArrayList();
@@ -843,7 +889,7 @@
for (int j3 = j2; j3 <= k2; ++j3)
{
@@ -2847,10 +3062,10 @@
@@ -2847,10 +3070,10 @@
public <T extends Entity> List<T> func_175647_a(Class <? extends T > p_175647_1_, AxisAlignedBB p_175647_2_, @Nullable Predicate <? super T > p_175647_3_)
{
@@ -858,7 +904,7 @@
List<T> list = Lists.<T>newArrayList();
for (int j3 = j2; j3 < k2; ++j3)
@@ -2930,11 +3145,13 @@
@@ -2930,11 +3153,13 @@
public void func_175650_b(Collection<Entity> p_175650_1_)
{
@@ -875,7 +921,17 @@
}
}
@@ -2958,7 +3175,7 @@
@@ -2948,7 +3173,8 @@
IBlockState iblockstate1 = this.func_180495_p(p_190527_2_);
AxisAlignedBB axisalignedbb = p_190527_3_ ? null : p_190527_1_.func_176223_P().func_185890_d(this, p_190527_2_);
- if (axisalignedbb != Block.field_185506_k && !this.func_72917_a(axisalignedbb.func_186670_a(p_190527_2_), p_190527_5_))
+ if (!((p_190527_5_ instanceof EntityPlayer) || !net.minecraftforge.event.ForgeEventFactory.onBlockPlace(p_190527_5_, new net.minecraftforge.common.util.BlockSnapshot(this, p_190527_2_, p_190527_1_.func_176223_P()), p_190527_4_).isCanceled())) return false;
+ if (axisalignedbb != Block.field_185506_k && !this.func_72855_b(axisalignedbb.func_186670_a(p_190527_2_))) // Forge: Remove second parameter, we patch placer to be non-null, passing it here skips collision checks for the placer
{
return false;
}
@@ -2958,7 +3184,7 @@
}
else
{
@@ -884,7 +940,7 @@
}
}
@@ -3042,7 +3259,7 @@
@@ -3042,7 +3268,7 @@
public int func_175651_c(BlockPos p_175651_1_, EnumFacing p_175651_2_)
{
IBlockState iblockstate1 = this.func_180495_p(p_175651_1_);
@@ -893,7 +949,7 @@
}
public boolean func_175640_z(BlockPos p_175640_1_)
@@ -3208,6 +3425,8 @@
@@ -3208,6 +3434,8 @@
d2 *= ((Double)MoreObjects.firstNonNull(p_184150_11_.apply(entityplayer1), Double.valueOf(1.0D))).doubleValue();
}
@@ -902,7 +958,7 @@
if ((p_184150_9_ < 0.0D || Math.abs(entityplayer1.field_70163_u - p_184150_3_) < p_184150_9_ * p_184150_9_) && (p_184150_7_ < 0.0D || d1 < d2 * d2) && (d0 == -1.0D || d1 < d0))
{
d0 = d1;
@@ -3269,7 +3488,7 @@
@@ -3269,7 +3497,7 @@
public long func_72905_C()
{
@@ -911,7 +967,7 @@
}
public long func_82737_E()
@@ -3279,17 +3498,17 @@
@@ -3279,17 +3507,17 @@
public long func_72820_D()
{
@@ -932,7 +988,7 @@
if (!this.func_175723_af().func_177746_a(blockpos1))
{
@@ -3301,7 +3520,7 @@
@@ -3301,7 +3529,7 @@
public void func_175652_B(BlockPos p_175652_1_)
{
@@ -941,7 +997,7 @@
}
@SideOnly(Side.CLIENT)
@@ -3321,12 +3540,18 @@
@@ -3321,12 +3549,18 @@
if (!this.field_72996_f.contains(p_72897_1_))
{
@@ -960,7 +1016,7 @@
return true;
}
@@ -3428,8 +3653,7 @@
@@ -3428,8 +3662,7 @@
public boolean func_180502_D(BlockPos p_180502_1_)
{
@@ -970,7 +1026,7 @@
}
@Nullable
@@ -3490,12 +3714,12 @@
@@ -3490,12 +3723,12 @@
public int func_72800_K()
{
@@ -985,7 +1041,7 @@
}
public Random func_72843_D(int p_72843_1_, int p_72843_2_, int p_72843_3_)
@@ -3539,7 +3763,7 @@
@@ -3539,7 +3772,7 @@
@SideOnly(Side.CLIENT)
public double func_72919_O()
{
@@ -994,7 +1050,7 @@
}
public void func_175715_c(int p_175715_1_, BlockPos p_175715_2_, int p_175715_3_)
@@ -3573,7 +3797,7 @@
@@ -3573,7 +3806,7 @@
public void func_175666_e(BlockPos p_175666_1_, Block p_175666_2_)
{
@@ -1003,7 +1059,7 @@
{
BlockPos blockpos1 = p_175666_1_.func_177972_a(enumfacing);
@@ -3581,18 +3805,15 @@
@@ -3581,18 +3814,15 @@
{
IBlockState iblockstate1 = this.func_180495_p(blockpos1);
@@ -1026,7 +1082,7 @@
}
}
}
@@ -3658,6 +3879,124 @@
@@ -3658,6 +3888,124 @@
return j2 >= -128 && j2 <= 128 && k2 >= -128 && k2 <= 128;
}
@@ -164,37 +164,16 @@
public static void func_185358_q()
{
func_185354_a(0, "ocean", new BiomeOcean((new Biome.BiomeProperties("Ocean")).func_185398_c(-1.0F).func_185400_d(0.1F)));
@@ -552,6 +635,7 @@
public Class <? extends EntityLiving > field_76300_b;
public int field_76301_c;
public int field_76299_d;
+ private final java.lang.reflect.Constructor<? extends EntityLiving> ctr;
public SpawnListEntry(Class <? extends EntityLiving > p_i1970_1_, int p_i1970_2_, int p_i1970_3_, int p_i1970_4_)
{
@@ -559,12 +643,26 @@
this.field_76300_b = p_i1970_1_;
this.field_76301_c = p_i1970_3_;
this.field_76299_d = p_i1970_4_;
+
+ try
+ {
+ ctr = p_i1970_1_.getConstructor(World.class);
+ }
+ catch (NoSuchMethodException e)
+ {
+ throw new RuntimeException(e);
+ }
}
public String toString()
@@ -565,6 +648,13 @@
{
return this.field_76300_b.getSimpleName() + "*(" + this.field_76301_c + "-" + this.field_76299_d + "):" + this.field_76292_a;
}
+
+ public EntityLiving newInstance(World world) throws Exception
+ {
+ return ctr.newInstance(world);
+ net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.EntityRegistry.getEntry(this.field_76300_b);
+ if (entry != null) return (EntityLiving) entry.newInstance(world);
+ return this.field_76300_b.getConstructor(World.class).newInstance(world);
+ }
}
@@ -115,7 +115,7 @@
this.field_76637_e.func_175690_a(p_177436_1_, tileentity1);
}
@@ -738,6 +736,7 @@
@@ -738,11 +736,13 @@
k = this.field_76645_j.length - 1;
}
@@ -123,7 +123,21 @@
p_76612_1_.field_70175_ag = true;
p_76612_1_.field_70176_ah = this.field_76635_g;
p_76612_1_.field_70162_ai = k;
@@ -778,7 +777,7 @@
p_76612_1_.field_70164_aj = this.field_76647_h;
this.field_76645_j[k].add(p_76612_1_);
+ this.func_76630_e(); // Forge - ensure chunks are marked to save after an entity add
}
public void func_76622_b(Entity p_76622_1_)
@@ -763,6 +763,7 @@
}
this.field_76645_j[p_76608_2_].remove(p_76608_1_);
+ this.func_76630_e(); // Forge - ensure chunks are marked to save after entity removals
}
public boolean func_177444_d(BlockPos p_177444_1_)
@@ -778,7 +779,7 @@
{
IBlockState iblockstate = this.func_177435_g(p_177422_1_);
Block block = iblockstate.func_177230_c();
@@ -132,7 +146,7 @@
}
@Nullable
@@ -786,6 +785,12 @@
@@ -786,6 +787,12 @@
{
TileEntity tileentity = this.field_150816_i.get(p_177424_1_);
@@ -145,7 +159,7 @@
if (tileentity == null)
{
if (p_177424_2_ == Chunk.EnumCreateEntityType.IMMEDIATE)
@@ -795,14 +800,9 @@
@@ -795,14 +802,9 @@
}
else if (p_177424_2_ == Chunk.EnumCreateEntityType.QUEUED)
{
@@ -161,7 +175,7 @@
return tileentity;
}
@@ -819,10 +819,11 @@
@@ -819,10 +821,11 @@
public void func_177426_a(BlockPos p_177426_1_, TileEntity p_177426_2_)
{
@@ -174,7 +188,7 @@
{
if (this.field_150816_i.containsKey(p_177426_1_))
{
@@ -854,12 +855,14 @@
@@ -854,12 +857,14 @@
for (ClassInheritanceMultiMap<Entity> classinheritancemultimap : this.field_76645_j)
{
@@ -190,7 +204,7 @@
this.field_76636_d = false;
for (TileEntity tileentity : this.field_150816_i.values())
@@ -871,6 +874,7 @@
@@ -871,6 +876,7 @@
{
this.field_76637_e.func_175681_c(classinheritancemultimap);
}
@@ -198,7 +212,7 @@
}
public void func_76630_e()
@@ -880,8 +884,8 @@
@@ -880,8 +886,8 @@
public void func_177414_a(@Nullable Entity p_177414_1_, AxisAlignedBB p_177414_2_, List<Entity> p_177414_3_, Predicate <? super Entity > p_177414_4_)
{
@@ -209,7 +223,7 @@
i = MathHelper.func_76125_a(i, 0, this.field_76645_j.length - 1);
j = MathHelper.func_76125_a(j, 0, this.field_76645_j.length - 1);
@@ -918,8 +922,8 @@
@@ -918,8 +924,8 @@
public <T extends Entity> void func_177430_a(Class <? extends T > p_177430_1_, AxisAlignedBB p_177430_2_, List<T> p_177430_3_, Predicate <? super T > p_177430_4_)
{
@@ -220,7 +234,7 @@
i = MathHelper.func_76125_a(i, 0, this.field_76645_j.length - 1);
j = MathHelper.func_76125_a(j, 0, this.field_76645_j.length - 1);
@@ -997,6 +1001,9 @@
@@ -997,6 +1003,9 @@
protected void func_186034_a(IChunkGenerator p_186034_1_)
{
@@ -230,7 +244,7 @@
if (this.func_177419_t())
{
if (p_186034_1_.func_185933_a(this, this.field_76635_g, this.field_76647_h))
@@ -1008,8 +1015,10 @@
@@ -1008,8 +1017,10 @@
{
this.func_150809_p();
p_186034_1_.func_185931_b(this.field_76635_g, this.field_76647_h);
@@ -241,7 +255,7 @@
}
public BlockPos func_177440_h(BlockPos p_177440_1_)
@@ -1064,7 +1073,7 @@
@@ -1064,7 +1075,7 @@
{
BlockPos blockpos = this.field_177447_w.poll();
@@ -250,7 +264,7 @@
{
TileEntity tileentity = this.func_177422_i(blockpos);
this.field_76637_e.func_175690_a(blockpos, tileentity);
@@ -1128,6 +1137,13 @@
@@ -1128,6 +1139,13 @@
@SideOnly(Side.CLIENT)
public void func_186033_a(PacketBuffer p_186033_1_, int p_186033_2_, boolean p_186033_3_)
{
@@ -264,7 +278,7 @@
boolean flag = this.field_76637_e.field_73011_w.func_191066_m();
for (int i = 0; i < this.field_76652_q.length; ++i)
@@ -1176,10 +1192,16 @@
@@ -1176,10 +1194,16 @@
this.field_76646_k = true;
this.func_76590_a();
@@ -281,7 +295,21 @@
}
public Biome func_177411_a(BlockPos p_177411_1_, BiomeProvider p_177411_2_)
@@ -1244,13 +1266,13 @@
@@ -1190,7 +1214,12 @@
if (k == 255)
{
- Biome biome = p_177411_2_.func_180300_a(p_177411_1_, Biomes.field_76772_c);
+ // Forge: checking for client ensures that biomes are only generated on integrated server
+ // in singleplayer. Generating biomes on the client may corrupt the biome ID arrays on
+ // the server while they are being generated because IntCache can't be thread safe,
+ // so client and server may end up filling the same array.
+ // This is not necessary in 1.13 and newer versions.
+ Biome biome = field_76637_e.field_72995_K ? Biomes.field_76772_c : p_177411_2_.func_180300_a(p_177411_1_, Biomes.field_76772_c);
k = Biome.func_185362_a(biome);
this.field_76651_r[j << 4 | i] = (byte)(k & 255);
}
@@ -1244,13 +1273,13 @@
BlockPos blockpos1 = blockpos.func_177982_a(k, (j << 4) + i1, l);
boolean flag = i1 == 0 || i1 == 15 || k == 0 || k == 15 || l == 0 || l == 15;
@@ -297,7 +325,7 @@
{
this.field_76637_e.func_175664_x(blockpos2);
}
@@ -1381,7 +1403,7 @@
@@ -1381,7 +1410,7 @@
{
blockpos$mutableblockpos.func_181079_c(blockpos$mutableblockpos.func_177958_n(), l, blockpos$mutableblockpos.func_177952_p());
@@ -306,7 +334,7 @@
{
this.field_76637_e.func_175664_x(blockpos$mutableblockpos);
}
@@ -1420,6 +1442,7 @@
@@ -1420,6 +1449,7 @@
else
{
System.arraycopy(p_177420_1_, 0, this.field_76634_f, 0, this.field_76634_f.length);
@@ -314,7 +342,7 @@
}
}
@@ -1489,4 +1512,55 @@
@@ -1489,4 +1519,55 @@
QUEUED,
CHECK;
}
@@ -32,8 +32,11 @@
ChunkPos chunkpos = new ChunkPos(p_75815_2_, p_75815_3_);
NBTTagCompound nbttagcompound = this.field_75828_a.get(chunkpos);
@@ -67,7 +89,7 @@
@@ -65,9 +87,10 @@
}
nbttagcompound = this.field_193416_e.func_188257_a(FixTypes.CHUNK, CompressedStreamTools.func_74794_a(datainputstream));
+ datainputstream.close(); // Forge: close stream after use
}
- return this.func_75822_a(p_75815_1_, p_75815_2_, p_75815_3_, nbttagcompound);
@@ -41,7 +44,7 @@
}
public boolean func_191063_a(int p_191063_1_, int p_191063_2_)
@@ -80,6 +102,13 @@
@@ -80,6 +103,13 @@
@Nullable
protected Chunk func_75822_a(World p_75822_1_, int p_75822_2_, int p_75822_3_, NBTTagCompound p_75822_4_)
{
@@ -55,7 +58,7 @@
if (!p_75822_4_.func_150297_b("Level", 10))
{
field_151505_a.error("Chunk file at {},{} is missing level data, skipping", Integer.valueOf(p_75822_2_), Integer.valueOf(p_75822_3_));
@@ -103,10 +132,29 @@
@@ -103,10 +133,29 @@
field_151505_a.error("Chunk file at {},{} is in the wrong location; relocating. (Expected {}, {}, got {}, {})", Integer.valueOf(p_75822_2_), Integer.valueOf(p_75822_3_), Integer.valueOf(p_75822_2_), Integer.valueOf(p_75822_3_), Integer.valueOf(chunk.field_76635_g), Integer.valueOf(chunk.field_76647_h));
nbttagcompound.func_74768_a("xPos", p_75822_2_);
nbttagcompound.func_74768_a("zPos", p_75822_3_);
@@ -86,7 +89,7 @@
}
}
}
@@ -121,7 +169,10 @@
@@ -121,7 +170,10 @@
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound.func_74782_a("Level", nbttagcompound1);
nbttagcompound.func_74768_a("DataVersion", 1343);
@@ -97,7 +100,7 @@
this.func_75824_a(p_75816_2_.func_76632_l(), nbttagcompound);
}
catch (Exception exception)
@@ -305,11 +356,19 @@
@@ -305,11 +357,19 @@
{
NBTTagCompound nbttagcompound2 = new NBTTagCompound();
@@ -117,7 +120,7 @@
}
}
@@ -318,8 +377,16 @@
@@ -318,8 +378,16 @@
for (TileEntity tileentity : p_75820_1_.func_177434_r().values())
{
@@ -134,7 +137,7 @@
}
p_75820_3_.func_74782_a("TileEntities", nbttaglist2);
@@ -345,6 +412,18 @@
@@ -345,6 +413,18 @@
p_75820_3_.func_74782_a("TileTicks", nbttaglist3);
}
@@ -153,7 +156,7 @@
}
private Chunk func_75823_a(World p_75823_1_, NBTTagCompound p_75823_2_)
@@ -388,6 +467,16 @@
@@ -388,6 +468,16 @@
chunk.func_76616_a(p_75823_2_.func_74770_j("Biomes"));
}
@@ -170,7 +173,7 @@
NBTTagList nbttaglist1 = p_75823_2_.func_150295_c("Entities", 10);
for (int j1 = 0; j1 < nbttaglist1.func_74745_c(); ++j1)
@@ -431,8 +520,6 @@
@@ -431,8 +521,6 @@
p_75823_1_.func_180497_b(new BlockPos(nbttagcompound3.func_74762_e("x"), nbttagcompound3.func_74762_e("y"), nbttagcompound3.func_74762_e("z")), block, nbttagcompound3.func_74762_e("t"), nbttagcompound3.func_74762_e("p"));
}
}
@@ -179,7 +182,7 @@
}
@Nullable
@@ -563,4 +650,9 @@
@@ -563,4 +651,9 @@
return entity;
}
}
@@ -1,6 +1,44 @@
--- ../src-base/minecraft/net/minecraft/world/chunk/storage/RegionFile.java
+++ ../src-work/minecraft/net/minecraft/world/chunk/storage/RegionFile.java
@@ -95,6 +95,12 @@
@@ -19,6 +19,9 @@
public class RegionFile
{
+ // Minecraft is limited to 256 sections per chunk. So 1MB. This can easily be override.
+ // So we extend this to use the REAL size when the count is maxed by seeking to that section and reading the length.
+ private static final boolean FORGE_ENABLE_EXTENDED_SAVE = Boolean.parseBoolean(System.getProperty("forge.enableExtendedSave", "true"));
private static final byte[] field_76720_a = new byte[4096];
private final File field_76718_b;
private RandomAccessFile field_76719_c;
@@ -74,13 +77,25 @@
int k = this.field_76719_c.readInt();
this.field_76716_d[j1] = k;
- if (k != 0 && (k >> 8) + (k & 255) <= this.field_76714_f.size())
+ int length = k & 255;
+ if (length == 255)
{
- for (int l = 0; l < (k & 255); ++l)
+ if ((k >> 8) <= this.field_76714_f.size())
+ { // We're maxed out, so we need to read the proper length from the section
+ this.field_76719_c.seek((k >> 8) * 4096);
+ length = (this.field_76719_c.readInt() + 4)/ 4096 + 1;
+ this.field_76719_c.seek(j1 * 4 + 4); //Go back to where we were
+ }
+ }
+ if (k != 0 && (k >> 8) + length <= this.field_76714_f.size())
+ {
+ for (int l = 0; l < length; ++l)
{
this.field_76714_f.set((k >> 8) + l, Boolean.valueOf(false));
}
}
+ else if (length > 0)
+ net.minecraftforge.fml.common.FMLLog.log.warn("Invalid chunk: ({}, {}) Offset: {} Length: {} runs off end file. {}", j1 % 32, (int)(j1 / 32), k >> 8, length, p_i2001_1_);
}
for (int k1 = 0; k1 < 1024; ++k1)
@@ -95,6 +110,12 @@
}
}
@@ -13,3 +51,65 @@
@Nullable
public synchronized DataInputStream func_76704_a(int p_76704_1_, int p_76704_2_)
@@ -117,6 +138,11 @@
{
int j = i >> 8;
int k = i & 255;
+ if (k == 255)
+ {
+ this.field_76719_c.seek(j * 4096);
+ k = (this.field_76719_c.readInt() + 4) / 4096 + 1;
+ }
if (j + k > this.field_76714_f.size())
{
@@ -129,10 +155,12 @@
if (l > 4096 * k)
{
+ net.minecraftforge.fml.common.FMLLog.log.warn("Invalid chunk: ({}, {}) Offset: {} Invalid Size: {}>{} {}", p_76704_1_, p_76704_2_, j, l, k * 4096, field_76718_b);
return null;
}
else if (l <= 0)
{
+ net.minecraftforge.fml.common.FMLLog.log.warn("Invalid chunk: ({}, {}) Offset: {} Invalid Size: {} {}", p_76704_1_, p_76704_2_, j, l, field_76718_b);
return null;
}
else
@@ -179,11 +207,17 @@
int i = this.func_76707_e(p_76706_1_, p_76706_2_);
int j = i >> 8;
int k = i & 255;
+ if (k == 255)
+ {
+ this.field_76719_c.seek(j * 4096);
+ k = (this.field_76719_c.readInt() + 4) / 4096 + 1;
+ }
int l = (p_76706_4_ + 5) / 4096 + 1;
if (l >= 256)
{
- return;
+ if (!FORGE_ENABLE_EXTENDED_SAVE) return;
+ net.minecraftforge.fml.common.FMLLog.log.warn("Large Chunk Detected: ({}, {}) Size: {} {}", p_76706_1_, p_76706_2_, l, field_76718_b);
}
if (j != 0 && k == l)
@@ -231,7 +265,7 @@
if (j1 >= l)
{
j = l1;
- this.func_76711_a(p_76706_1_, p_76706_2_, l1 << 8 | l);
+ this.func_76711_a(p_76706_1_, p_76706_2_, l1 << 8 | (l > 255 ? 255 : l));
for (int j2 = 0; j2 < l; ++j2)
{
@@ -253,7 +287,7 @@
this.field_76715_g += 4096 * l;
this.func_76712_a(j, p_76706_3_, p_76706_4_);
- this.func_76711_a(p_76706_1_, p_76706_2_, j << 8 | l);
+ this.func_76711_a(p_76706_1_, p_76706_2_, j << 8 | (l > 255 ? 255 : l));
}
}
@@ -52,24 +52,26 @@
}
}
@@ -1770,7 +1780,6 @@
@@ -1770,7 +1780,7 @@
EntityZombieVillager entityzombievillager = new EntityZombieVillager(p_74893_1_);
entityzombievillager.func_70012_b((double)j + 0.5D, (double)k, (double)l + 0.5D, 0.0F, 0.0F);
entityzombievillager.func_180482_a(p_74893_1_.func_175649_E(new BlockPos(entityzombievillager)), (IEntityLivingData)null);
- entityzombievillager.func_190733_a(this.func_180779_c(i, 0));
+ entityzombievillager.setForgeProfession(this.chooseForgeProfession(i, net.minecraftforge.fml.common.registry.VillagerRegistry.FARMER));
entityzombievillager.func_110163_bv();
p_74893_1_.func_72838_d(entityzombievillager);
}
@@ -1778,7 +1787,7 @@
@@ -1778,7 +1788,8 @@
{
EntityVillager entityvillager = new EntityVillager(p_74893_1_);
entityvillager.func_70012_b((double)j + 0.5D, (double)k, (double)l + 0.5D, 0.0F, 0.0F);
- entityvillager.func_70938_b(this.func_180779_c(i, p_74893_1_.field_73012_v.nextInt(6)));
+ net.minecraftforge.fml.common.registry.VillagerRegistry.setRandomProfession(entityvillager, p_74893_1_.field_73012_v);
+ entityvillager.setProfession(this.chooseForgeProfession(i, entityvillager.getProfessionForge()));
entityvillager.func_190672_a(p_74893_1_.func_175649_E(new BlockPos(entityvillager)), (IEntityLivingData)null, false);
p_74893_1_.func_72838_d(entityvillager);
}
@@ -1786,13 +1795,21 @@
@@ -1786,13 +1797,21 @@
}
}
+9 -1
View File
@@ -1 +1,9 @@
rootProject.name = 'forge'
rootProject.name = 'forge'
include ':mcp'
include ':clean'
include ':forge'
project(":mcp").projectDir = file("projects/mcp")
project(":clean").projectDir = file("projects/clean")
project(":forge").projectDir = file("projects/forge")
@@ -1,6 +1,6 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
* Copyright (c) 2016-2020.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1,6 +1,6 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
* Copyright (c) 2016-2020.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1,6 +1,6 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
* Copyright (c) 2016-2020.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1,6 +1,6 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
* Copyright (c) 2016-2020.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1,6 +1,6 @@
/*
* Minecraft Forge
* Copyright (c) 2016-2018.
* Copyright (c) 2016-2020.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
Loaded 100 of 963 files, more files were not shown because too many files have changed in this diff. Show more